邻接矩阵

          #include <iostream> #include <strstream> #include <string> using namespace std; //定义把无权图或有全图转为邻接矩阵 class CMatrix { public:     //构造函数,n为图的顶点个数     CMatrix():m_matrix(NULL), m_n(0) { }     //析构函数,回收内存     ~CMatrix() {         if(NULL != m_matrix){             for (int i=0; i<m_n; ++i)                 if( NULL != m_matrix[i] ) //判断是否分配内存                     delete [] m_matrix[i];             delete m_matrix;         }     }     void CreateMatrix ( );     void PrintMatrix ( );     int **GetMatrix (); private:     int **m_matrix; //矩阵     int m_n;       //矩阵的秩      }; //创建矩阵 void CMatrix::CreateMatrix () {     cout<<"输入图的顶点数n:";     cin>>m_n;     //申请内存     for (int i=0; i<m_n; ++i)         m_matrix = new int*[m_n];     for (int j=0; j<m_n; ++j)         m_matrix[j] = new int[m_n];     //初始化Matrix     for (int i=0; i<m_n; ++i) {         for(int j=0; j<m_n; ++j) {             m_matrix[i][j] = 0;         }     }     cout<<"输入边集(如:{<1,2>}\\{(1,2)},若为带权图则为{<1,2>3}\\{(1,2)3}:"<<endl;     string str;     cin>>str;     //将 string 转换成 char*     char *cstr = new char[str.size()+1]; //最后加上'\0'     int i=0;     for(i=0; i != str.size(); ++i)         cstr[i] = str.at(i);     cstr[i]='\0';     cout<<cstr<<endl;     istrstream strin(cstr);     char cTmp, cEdge1, cEdge2, cEdge3;//cEdge1存 < ,cEdge2存 , ,cEdge3存 >     int iBgn, iEnd; //边的起点、终点     strin>>cTmp;     while (true) {          char cPeek;         cPeek = strin.peek();         //边集读取完成退出         if( '}' == cTmp || '}' == cPeek) {             break;         }                  //读取边集<a,b> 或 (a,b)         strin>>cEdge1>>iBgn>>cEdge2>>iEnd>>cEdge3;         cout<<cEdge1<<iBgn<<cEdge2<<iEnd<<cEdge3<<endl;         //继续读取下一条边         if(  cTmp=='{' || cTmp==',') {             m_matrix[iBgn][iEnd] = 1;         }              //peek下一个字符,看是否为带权图         cTmp = strin.peek();         cout<<cTmp<<endl;         //此图是否为 带权图         if ( cTmp>='0' && cTmp<='9') {             int weight =0;             strin>>weight;             m_matrix[iBgn][iEnd] = weight;             strin>>cTmp;//读取逗号         } else {             //cTmp可能为 ‘,’, }             strin>>cTmp;         }     } } //打印Matrix void CMatrix::PrintMatrix() {     cout<<"该图的邻接矩阵如下:"<<endl;     for (int i=0; i<m_n; ++i) {         cout<<"\t\t";         for (int j=0; j<m_n; ++j)             cout<<m_matrix[i][j]<<'\t';         cout<<'\n';     } } //得到邻接矩阵 int **CMatrix::GetMatrix () {     return this->m_matrix; } int main() {     CMatrix matrix;     int **pMatrix = NULL;     matrix.CreateMatrix();     matrix.PrintMatrix();     pMatrix = matrix.GetMatrix();     return 0; }
          相关文章
          相关标签/搜索
          每日一句
            每一个你不满意的现在,都有一个你没有努力的曾经。
          公众号推荐
             一个历史类的公众号,欢迎关注
          一两拨千金
          三十码期期必中√资料今晚六给彩开奖结果,白小姐中特玄机,六开彩开奖现场直播,2017开奖记录开奖结果,开马现场直播,马报免费资料2017大全