矩阵链算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
using System.Text.RegularExpressions;
using System.Collections;
namespace Matrix
{
class Program
{
public static int nummulti = 0;
static ArrayList list1 = new ArrayList();//定义计算式存储列表
{
sign = 1;
break;
}
else
{
//计算两个矩阵相乘的乘法次数
result = result + (int)listcolumn[engnum1 - 65] * (int)listrow[engnum2 - 65] * (int)listcolumn[engnum2 - 65];
countmat = countmat + 1;
//判断输入的字符是否为数字
public bool b(string s)
{
string pattern = ("^[0-9]"); ;
Regex rx = new Regex(pattern);
return rx.IsMatch(s);
}
}
}
while (!t.b(input))
{
input = Console.ReadLine();
list1.Add(input);
nummulti = nummulti + 1;
}
for (int i = 0; i < nummulti - 1; i++)//取出列表中存储的计算式
{
string mystr = (string)list1[i];
static ArrayList listrow = new ArrayList();//定义矩阵行数存储列表
static ArrayList listcolumn = new ArrayList();//定义矩阵列数存储列表
static void Main(string[] args)
{
/***********************************************************************************************/
int engnum1 = 0;
int engnum2 = 0;
if (64 < num && num < 98)//把计算式元素存储到计算式元素存储列表中
{
list2.Add(num);
count = count + 1;
}
else if (num == 41)//遇到“)”则取两个存储矩阵进行计算
/************************最后修改人:Hugo ***************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
string[] str = s.Split(' ');//把输入的一行字符按空格拆分
listrow.Add(Int32.Parse(str[1]));//行数存储到矩阵行数存储列表
listcolumn.Add(Int32.Parse(str[2]));//列数存储到矩阵列数存储列表
}
Console.WriteLine("请输入需要计算的代数式,输入完毕后换行输入0-9任一数字进行计算");
int result = 0;//计算结果
int sign = 0;//是否符合乘法规则标志
/***********************************************************************************************/
//计算一个计算式的乘法次数
/************************ Matrix Chain Multiplication ***************************/
/************************作者:Hugo ***************************/
/************************最后修改日期:2015.09.10 ***************************/
//把两个矩阵相乘后得到的矩阵存储到矩阵行数和列数存储列表中
listrow.Add(listrow[engnum2 - 65]);
listcolumn.Add(listcolumn[engnum1 - 65]);
//把两个矩阵相乘后得到的矩阵存储到计算式元素存储列表中
list2[count] = countmat + 64;
{
engnum1 = (int)list2[count - 1];
engnum2 = (int)list2[count - 2];
count = count - 2;
//判断两个矩阵是否符合乘法规则
if ((int)listrow[engnum1 - 65] != (int)listcolumn[engnum2 - 65])
/***********************************************************************************************/
//从键盘上获取计算式
Program t = new Program();
string input = " ";
int count = 0;wenku.baidu.com
Stack mystack = new Stack();
ArrayList list2 = new ArrayList();//定义计算式元素存储列表
foreach (char c in mystr)
{
int num = Convert.ToInt32(c);
string str = Convert.ToString(c);
//从键盘上获取矩阵
int nummatrix = Int32.Parse(Console.ReadLine());
int countmat = 0;
for (countmat = 0; countmat < nummatrix; countmat++)
{
string s = Console.ReadLine();
count = count + 1;
}
}
}
if (sign == 1)
{
Console.WriteLine("error");
sign = 0;
}
else
Console.WriteLine("{0}", result);
}
Console.ReadLine();
}
/***********************************************************************************************/
using System.Collections;
namespace Matrix
{
class Program
{
public static int nummulti = 0;
static ArrayList list1 = new ArrayList();//定义计算式存储列表
{
sign = 1;
break;
}
else
{
//计算两个矩阵相乘的乘法次数
result = result + (int)listcolumn[engnum1 - 65] * (int)listrow[engnum2 - 65] * (int)listcolumn[engnum2 - 65];
countmat = countmat + 1;
//判断输入的字符是否为数字
public bool b(string s)
{
string pattern = ("^[0-9]"); ;
Regex rx = new Regex(pattern);
return rx.IsMatch(s);
}
}
}
while (!t.b(input))
{
input = Console.ReadLine();
list1.Add(input);
nummulti = nummulti + 1;
}
for (int i = 0; i < nummulti - 1; i++)//取出列表中存储的计算式
{
string mystr = (string)list1[i];
static ArrayList listrow = new ArrayList();//定义矩阵行数存储列表
static ArrayList listcolumn = new ArrayList();//定义矩阵列数存储列表
static void Main(string[] args)
{
/***********************************************************************************************/
int engnum1 = 0;
int engnum2 = 0;
if (64 < num && num < 98)//把计算式元素存储到计算式元素存储列表中
{
list2.Add(num);
count = count + 1;
}
else if (num == 41)//遇到“)”则取两个存储矩阵进行计算
/************************最后修改人:Hugo ***************************/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
string[] str = s.Split(' ');//把输入的一行字符按空格拆分
listrow.Add(Int32.Parse(str[1]));//行数存储到矩阵行数存储列表
listcolumn.Add(Int32.Parse(str[2]));//列数存储到矩阵列数存储列表
}
Console.WriteLine("请输入需要计算的代数式,输入完毕后换行输入0-9任一数字进行计算");
int result = 0;//计算结果
int sign = 0;//是否符合乘法规则标志
/***********************************************************************************************/
//计算一个计算式的乘法次数
/************************ Matrix Chain Multiplication ***************************/
/************************作者:Hugo ***************************/
/************************最后修改日期:2015.09.10 ***************************/
//把两个矩阵相乘后得到的矩阵存储到矩阵行数和列数存储列表中
listrow.Add(listrow[engnum2 - 65]);
listcolumn.Add(listcolumn[engnum1 - 65]);
//把两个矩阵相乘后得到的矩阵存储到计算式元素存储列表中
list2[count] = countmat + 64;
{
engnum1 = (int)list2[count - 1];
engnum2 = (int)list2[count - 2];
count = count - 2;
//判断两个矩阵是否符合乘法规则
if ((int)listrow[engnum1 - 65] != (int)listcolumn[engnum2 - 65])
/***********************************************************************************************/
//从键盘上获取计算式
Program t = new Program();
string input = " ";
int count = 0;wenku.baidu.com
Stack mystack = new Stack();
ArrayList list2 = new ArrayList();//定义计算式元素存储列表
foreach (char c in mystr)
{
int num = Convert.ToInt32(c);
string str = Convert.ToString(c);
//从键盘上获取矩阵
int nummatrix = Int32.Parse(Console.ReadLine());
int countmat = 0;
for (countmat = 0; countmat < nummatrix; countmat++)
{
string s = Console.ReadLine();
count = count + 1;
}
}
}
if (sign == 1)
{
Console.WriteLine("error");
sign = 0;
}
else
Console.WriteLine("{0}", result);
}
Console.ReadLine();
}
/***********************************************************************************************/