要增加
VtxArray=new VtxArray[12][12];

解决方案 »

  1.   

    size1,size2为数组大小
    private Vertex [][] VtxArray=new VtxArray[size1][size2];
      

  2.   

    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;
    }
    }

    }
    是一个作业,最短路
    可以运行,就是会抛出异常。
      

  3.   

    如果我把全部代码写在static void Main(string[] args)内
    运行结果正确,估计是语法错误,但是不知道为什么会有这个异常。
    初学,请教
      

  4.   

    重复定义的二个一样的变量VtxArray,把下面的VtxArray注释掉,程序正常执行 
    public class Graph
    {
    private Vertex [][] VtxArray;
    public Graph()
    {
    // Vertex [][] VtxArray;
      

  5.   

    ……………………………………………………
    thx very much!
    我是初学者.....