邻接矩阵存储带权值的无向图
# 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;
}