邻接矩阵存储带权值的无向图

时间:2025-03-07 17:03:47
# include"undiGraph(adjacent marix).h" # include<iostream> # include"" using namespace std; myUndiGraph::myUndiGraph(int i,int j):iVertex(i),iEdge(j),adjacentMatrix(NULL) { this->adjacentMatrix = new double*[i]; vertexInfo = new vertex[iVertex]; for (int k = 0;k < i;++k) { adjacentMatrix[k] = new double[i]; } for (int i1 = 0;i1 < i;i1++) for (int j1 = 0;j1 < i;j1++) if(i1==j1) adjacentMatrix[i1][j1] = 0;//对角线为0 else adjacentMatrix[i1][j1] = MAX; } myUndiGraph::~myUndiGraph() { for (int i1 = 0;i1 < iVertex;i1++) delete[]adjacentMatrix[i1]; delete []adjacentMatrix; delete[]vertexInfo; } void myUndiGraph::create() { cout << "请输入顶点信息:" << endl; for (int i = 0;i < iVertex;i++) cin >> vertexInfo[i].data; cout << "请依次输入无向图中相关联的顶点(0表示第一个顶点)及权值" << endl; int a, b; for (int i = 0;i < iEdge;++i) { cin >> a >> b; cin >> adjacentMatrix[a][b]; adjacentMatrix[b][a] = adjacentMatrix[a][b]; } } void myUndiGraph::traverMatrix() { for (int i1 = 0;i1 < iVertex;i1++) { for (int j1 = 0;j1 < iVertex;j1++) cout << adjacentMatrix[i1][j1] << "\t"; cout << endl; } } void myUndiGraph::DFS(int i)//depth first search深度优先搜索 { //从第一个节点开始搜索(下标为0) if (!vertexInfo[i].isVisited)//如果第i+1个节点为被访问 { vertexInfo[i].visited(); vertexInfo[i].isVisited = true; } for (int j = i+1;j < iVertex;j++)//在第i+1个顶点的邻接点中遍历 { if (adjacentMatrix[i][j] != MAX) DFS(j); } } void myUndiGraph::BFS(int j)//breath first search广度优先搜索 { if (!vertexInfo[j].isVisited)//如果该节点为访问 { vertexInfo[j].visited(); vertexInfo[j].isVisited = true; } myQuene<int> m(30); (j); int x; while (!()) { (x); for (int i = x + 1;i < iVertex;++i) { if (adjacentMatrix[x][i] != MAX)//第j+1个节点的所有邻接点 { if (!vertexInfo[i].isVisited) { vertexInfo[i].visited(); vertexInfo[i].isVisited = true; (i); } } } } } void myUndiGraph::setVisitedFalse() { for (int i = 0;i < iVertex;++i) vertexInfo[i].isVisited = false; }