判断邻接矩阵是否是无向图


/*6.8设图G用邻接矩阵A[n+1,n+1]表示,设计算法以判断G是否是无向图。
*/
#include<iostream>
using namespace std;
#define max 1000
#define INF 65535
typedef char element;
typedef int cellType;
typedef enum { UDG, UDN, DG, DN }GraphKind;//枚举图的类型
typedef struct GraphAdjMatrix {
    element data[max];//顶点数组,存放顶点元素的值,从0开始
    cellType AdjMatrix[max][max];//邻接矩阵,元素类型为cellType
    int verNum;//顶点数
    int arcNum;//弧数
    GraphKind gkind;//图的类型,0-无向图,1-无向网,2-有向图,3-有向网
}Graph;//图的类型名

void createGraph(Graph& G) {
    int i, j, k, w;
    cout << "输入顶点数和边数:" << endl;
    cin >> G.verNum >> G.arcNum;
    cout << "输入结点信息:" << endl;
    for (i = 0; i < G.verNum; i++) {
        cin >> &(G.data[i]);
    }
    //邻接矩阵初始化
    for (i = 0; i < G.verNum; i++) {
        for (j = 0; j < G.verNum; j++)
            G.AdjMatrix[i][j] = INF;
    }
    //建立邻接矩阵
    for (k = 0; k < G.arcNum*G.arcNum; k++) {
        cout << "输入边的下标i,下标j,和数据w:";
        cin >> i >> j>>w;
         G.AdjMatrix[i][j] = w;
     }
    int flag = 1;
    for (i = 0; i < G.verNum; i++) {
        for (j = 0; j < G.verNum; j++) {
            if (G.AdjMatrix[j][i] == 1 && G.AdjMatrix[i][j] == 1) {
                flag = 0;
            }
        }
    }
    if (flag == 0)
        cout << "G是否是无向图" << endl;
    else
        cout << "G是否是有向图" << endl;
}
int main() {
    Graph G;
    createGraph(G);
    return 0;
}

img


想问一下,这里为什么报错,我感觉我写的没有什么问题啊

可能你的逻辑没有问题,但是报错显示的意思是栈溢出了,看看你的算法中循环或者递归的次数是不是太多了,甚至有死循环的情况。着重检查循环那块代码

判断无向图的时候,不应该在发现邻接矩阵不对称的时候直接给flag赋值0,跳出循环,另外输出内容把“是否”去掉,看着怪怪的,还有报错提示Stack over flow栈溢出,建议文件读取图内容,键盘输入怪累的