none
建立邻接矩阵的问题(无向,有权值) RRS feed

  • 问题

  • 要建立一个邻邦接矩阵,要求无向,而且有权值,我是这样做的:

    for(int r=0; r<VEX_NUM; r++)
      for(int c; c<VEX_NUM; c++)
      {
       if(r == c)
        G.weight[r][c] = 0;//权值赋为0
       else//这要根据实际情况而定
       {
        //search()  调用查找函数在E数组中查找
        //{
        //if()  如果连通,则赋相应的权值
        //      应为无向量图的特点是对称,所以有
        //     G.weight[r][c] =
        //     G.weight[c][r] =
        //else  如果不连通,则赋值为一个很大的值,在程序中定义为常量
        //     G.weight[r][c] = Infinity;
        //     G.weight[c][r] = Infinity;
        //}
       }

      }

    这里要定义二个数组,要从Graph.txt文件中创建,Graph.txt是这样定义的:

    directed = false
    V = city1,city2,city3,city4,city5,city6
    E = (city1, city5, 8), (city1, city2, 6), (city5, city4, 12), (city5, city2, 3),(city2, city3, 4), (city3,city4, 7), (city4, city6, 12)

    这是无向图G(V,E),要用vector建立二个数组,一个是vector<char>V(VEX_NUM);要包括所有的城市名.

    另一个是包括起点城市名、终点城市名和权值的数组。

    我现在就是卡在建立这二个数组上了。不知道要用什么方法把有用的值提取出来,请高手多指点。


    xiao
    2011年4月8日 6:58

答案

  • 请问你是想问怎么可以方便的进行文件读去么?

    你可以用

    std::istream infile;

    然后

    for(std::getline(infile, current_line); !infile.eof(); std::getline(infile, current_line))
            {

    }

    在循环中通过std::string进行解析。比如遇到V然后分别读去每个,分割的字符串。

    或者使用boost::tokenizer< boost::char_separator<char> >来进行解析


    麻烦把正确答案设为解答。
    • 已标记为答案 wh_xiao 2011年4月9日 5:56
    2011年4月8日 10:10
    版主
    • 已标记为答案 wh_xiao 2011年4月11日 22:45
    2011年4月11日 7:55
    版主

全部回复