这个程序会抛出一个异常,我不是很清楚原因,请指教,谢谢 要增加VtxArray=new VtxArray[12][12]; 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 size1,size2为数组大小private Vertex [][] VtxArray=new VtxArray[size1][size2]; using System;namespace ShortestPath{ /// <summary> /// Class1 的摘要说明。 /// </summary> public class Class1 { /// <summary> /// 应用程序的主入口点。 /// </summary> [STAThread] static void Main(string[] args) { Graph g = new Graph(); System.Console.WriteLine(g.ShortestPathOfG()); } } struct Vertex { public char sVertexName; public int iWeight;// public int iFlag;//1:该点当前的iLenth是离源点最短的距离;-1表示该点是终点 public char sNameOfLastVertex; } class Graph { private Vertex [][] VtxArray; public Graph() { Vertex [][] VtxArray; VtxArray = new Vertex [7][]; VtxArray[0] = new Vertex[3]; VtxArray[0][0].sVertexName = 'A'; VtxArray[0][0].iWeight = 0; VtxArray[0][1].sVertexName = 'B'; VtxArray[0][1].iWeight = 6; VtxArray[0][2].sVertexName = 'C'; VtxArray[0][2].iWeight = 7; VtxArray[1] = new Vertex[3]; VtxArray[1][0].sVertexName = 'B'; VtxArray[1][0].iWeight = 100; VtxArray[1][1].sVertexName = 'E'; VtxArray[1][1].iWeight = 6; VtxArray[1][2].sVertexName = 'F'; VtxArray[1][2].iWeight = 3; VtxArray[2] = new Vertex[2]; VtxArray[2][0].sVertexName = 'C'; VtxArray[2][0].iWeight = 100; VtxArray[2][1].sVertexName = 'D'; VtxArray[2][1].iWeight = 2; VtxArray[3] = new Vertex[3]; VtxArray[3][0].sVertexName = 'D'; VtxArray[3][0].iWeight = 100; VtxArray[3][1].sVertexName = 'E'; VtxArray[3][1].iWeight = 4; VtxArray[3][2].sVertexName = 'F'; VtxArray[3][2].iWeight = 3; VtxArray[4] = new Vertex[2]; VtxArray[4][0].sVertexName = 'E'; VtxArray[4][0].iWeight = 100; VtxArray[4][1].sVertexName = 'G'; VtxArray[4][1].iWeight = 11; VtxArray[5] = new Vertex[2]; VtxArray[5][0].sVertexName = 'F'; VtxArray[5][0].iWeight = 100; VtxArray[5][1].sVertexName = 'G'; VtxArray[5][1].iWeight = 10; VtxArray[6] = new Vertex[1]; VtxArray[6][0].sVertexName = 'G'; VtxArray[6][0].iWeight = 100; /*for(int i=0;i<7;i++) { foreach(Vertex v in VtxArray[i]) { v.iFlag = 0; v.sNameOfLastVertex = ""; } }*/ } public string ShortestPathOfG() { for(int i=0;i<7;i++) { for(int j=0;j<this.VtxArray[i].Length;j++) { this.VtxArray[i][j].iFlag = 0; this.VtxArray[i][j].sNameOfLastVertex = 'A'; } } this.VtxArray[0][0].iFlag = 1; for(int i=0;this.VtxArray[6][0].iFlag != 1;) { for(int j=1;j<this.VtxArray[i].Length;j++) { int k = (int)this.VtxArray[i][j].sVertexName - 65; if(this.VtxArray[k][0].iFlag == 0) { if(this.VtxArray[i][0].iWeight + this.VtxArray[i][j].iWeight < this.VtxArray[k][0].iWeight) { this.VtxArray[k][0].iWeight = this.VtxArray[i][0].iWeight + this.VtxArray[i][j].iWeight; this.VtxArray[k][0].sNameOfLastVertex = this.VtxArray[i][0].sVertexName; } } } int min=100; for(int l=1;l<7;l++) { if(this.VtxArray[l][0].iFlag == 0) { if(this.VtxArray[l][0].iWeight < min) { min = this.VtxArray[l][0].iWeight; i = l; } } } this.VtxArray[i][0].iFlag = 1; for(int ii=0;ii<7;ii++) System.Console.WriteLine(this.VtxArray[ii][0].sVertexName+"->flag:"+this.VtxArray[ii][0].iFlag+",weight:"+this.VtxArray[ii][0].iWeight+",lastname:"+this.VtxArray[ii][0].sNameOfLastVertex); System.Console.WriteLine("***********"); } string path = "G:<"+this.VtxArray[6][0].iWeight+">"; int last=6; do { path = this.VtxArray[last][0].sNameOfLastVertex + "---->" + path; last = (int)this.VtxArray[last][0].sNameOfLastVertex - 65; }while(!path.Substring(0,1).Equals("A")); return path; } } }是一个作业,最短路可以运行,就是会抛出异常。 如果我把全部代码写在static void Main(string[] args)内运行结果正确,估计是语法错误,但是不知道为什么会有这个异常。初学,请教 重复定义的二个一样的变量VtxArray,把下面的VtxArray注释掉,程序正常执行 public class Graph { private Vertex [][] VtxArray; public Graph() {// Vertex [][] VtxArray; ……………………………………………………thx very much!我是初学者..... 请问,DataTable导出到EXCEL 2010 tcp/ip方式接收从服务器传过来的大量数据 关于模拟QQ 关于继承问题。。。。 在winform中取得虚拟目录的物理路径 在webfrom中如何设置控件的焦点 如何绑定datagrid某一列作为数据源?? 要负责一个档案管理信息系统,大家给个思路建议。(之前没做过负责) xslt问题,急 关于Emgu CV 图像旋转的问题 如何知道指定目录中还有多少个目录,每个目录的名字是什么 [求助]如何用System.Web.Mail通过新需要验证的smtp服务器发送邮件
private Vertex [][] VtxArray=new VtxArray[size1][size2];
{
/// <summary>
/// Class1 的摘要说明。
/// </summary>
public class Class1
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string[] args)
{
Graph g = new Graph();
System.Console.WriteLine(g.ShortestPathOfG());
}
}
struct Vertex
{
public char sVertexName;
public int iWeight;//
public int iFlag;//1:该点当前的iLenth是离源点最短的距离;-1表示该点是终点
public char sNameOfLastVertex;
}
class Graph
{
private Vertex [][] VtxArray;
public Graph()
{
Vertex [][] VtxArray;
VtxArray = new Vertex [7][]; VtxArray[0] = new Vertex[3];
VtxArray[0][0].sVertexName = 'A';
VtxArray[0][0].iWeight = 0;
VtxArray[0][1].sVertexName = 'B';
VtxArray[0][1].iWeight = 6;
VtxArray[0][2].sVertexName = 'C';
VtxArray[0][2].iWeight = 7; VtxArray[1] = new Vertex[3];
VtxArray[1][0].sVertexName = 'B';
VtxArray[1][0].iWeight = 100;
VtxArray[1][1].sVertexName = 'E';
VtxArray[1][1].iWeight = 6;
VtxArray[1][2].sVertexName = 'F';
VtxArray[1][2].iWeight = 3; VtxArray[2] = new Vertex[2];
VtxArray[2][0].sVertexName = 'C';
VtxArray[2][0].iWeight = 100;
VtxArray[2][1].sVertexName = 'D';
VtxArray[2][1].iWeight = 2;
VtxArray[3] = new Vertex[3];
VtxArray[3][0].sVertexName = 'D';
VtxArray[3][0].iWeight = 100;
VtxArray[3][1].sVertexName = 'E';
VtxArray[3][1].iWeight = 4;
VtxArray[3][2].sVertexName = 'F';
VtxArray[3][2].iWeight = 3; VtxArray[4] = new Vertex[2];
VtxArray[4][0].sVertexName = 'E';
VtxArray[4][0].iWeight = 100;
VtxArray[4][1].sVertexName = 'G';
VtxArray[4][1].iWeight = 11;
VtxArray[5] = new Vertex[2];
VtxArray[5][0].sVertexName = 'F';
VtxArray[5][0].iWeight = 100;
VtxArray[5][1].sVertexName = 'G';
VtxArray[5][1].iWeight = 10; VtxArray[6] = new Vertex[1];
VtxArray[6][0].sVertexName = 'G';
VtxArray[6][0].iWeight = 100;
/*for(int i=0;i<7;i++)
{
foreach(Vertex v in VtxArray[i])
{
v.iFlag = 0;
v.sNameOfLastVertex = "";
}
}*/
}
public string ShortestPathOfG()
{
for(int i=0;i<7;i++)
{
for(int j=0;j<this.VtxArray[i].Length;j++)
{
this.VtxArray[i][j].iFlag = 0;
this.VtxArray[i][j].sNameOfLastVertex = 'A';
}
}
this.VtxArray[0][0].iFlag = 1; for(int i=0;this.VtxArray[6][0].iFlag != 1;)
{
for(int j=1;j<this.VtxArray[i].Length;j++)
{
int k = (int)this.VtxArray[i][j].sVertexName - 65;
if(this.VtxArray[k][0].iFlag == 0)
{
if(this.VtxArray[i][0].iWeight + this.VtxArray[i][j].iWeight < this.VtxArray[k][0].iWeight)
{
this.VtxArray[k][0].iWeight = this.VtxArray[i][0].iWeight + this.VtxArray[i][j].iWeight;
this.VtxArray[k][0].sNameOfLastVertex = this.VtxArray[i][0].sVertexName;
}
}
}
int min=100;
for(int l=1;l<7;l++)
{
if(this.VtxArray[l][0].iFlag == 0)
{
if(this.VtxArray[l][0].iWeight < min)
{
min = this.VtxArray[l][0].iWeight;
i = l;
}
}
}
this.VtxArray[i][0].iFlag = 1;
for(int ii=0;ii<7;ii++)
System.Console.WriteLine(this.VtxArray[ii][0].sVertexName+"->flag:"+this.VtxArray[ii][0].iFlag+",weight:"+this.VtxArray[ii][0].iWeight+",lastname:"+this.VtxArray[ii][0].sNameOfLastVertex);
System.Console.WriteLine("***********");
}
string path = "G:<"+this.VtxArray[6][0].iWeight+">";
int last=6;
do
{
path = this.VtxArray[last][0].sNameOfLastVertex + "---->" + path;
last = (int)this.VtxArray[last][0].sNameOfLastVertex - 65;
}while(!path.Substring(0,1).Equals("A"));
return path;
}
}
}
是一个作业,最短路
可以运行,就是会抛出异常。
运行结果正确,估计是语法错误,但是不知道为什么会有这个异常。
初学,请教
public class Graph
{
private Vertex [][] VtxArray;
public Graph()
{
// Vertex [][] VtxArray;
thx very much!
我是初学者.....