#include<iostream>
#include<cstdlib>
#define MaxNum 60
#define MaxValue 190
using namespace std;
typedef struct Graph
{
char Vertex[MaxNum];
int GType;
int VNum;
int EdgeNum;
int EdgeWight[MaxNum][MaxNum];
int isTrav[MaxNum];
};
void CreateGraph(Graph *G)
{
int i, j, k;
int weight;
char Estart, Eend;
cout << "输入各顶点信息 : " << endl;
for (i = 0; i < G->VNum; i++)
{
cout << "第 " << i + 1 << " 个定点 " << endl;
cin >> G->Vertex[i];
}
cout << "输入各边顶点及权值 " << endl;
for (k = 0; k < G->EdgeNum; k++)
{
cout << "第 " << k + 1 << " 条边 " << endl;
cin >> Estart >> Eend >> weight;
for (i = 0; G->Vertex[i] != Estart; i++);
for (j = 0; G->Vertex[j] != Eend; j++);
G->EdgeWight[i][j] = weight;
if (G->GType == 0)
{
G->EdgeWight[j][i] = weight;
}
}
}
void ClearGraph(Graph *G)
{
for (int i = 0; i < G->VNum; i++)
for (int j = 0; j < G->VNum; j++)
G->EdgeWight[i][j] = MaxValue;
}
void OutGraph(Graph *G)
{
cout << " ";
for (int i = 0; i < G->VNum; i++)
cout << G->Vertex[i] << " ";
cout << endl;
for (int i = 0; i < G->VNum; i++)
{
cout << G->Vertex[i] << " ";
for (int j = 0; j < G->VNum; j++)
{
if (G->EdgeWight[i][j] == MaxValue)
cout << " N ";
else
cout << " " << G->EdgeWight[i][j] << " ";
}
cout << endl;
}
}
void DeepGraphOne(Graph *G, int n)
{
int i;
G->isTrav[n] = 1;
cout << G->Vertex[n];
for (int i = 0; i < G->VNum; i++)
{
if (G->EdgeWight[n][i] != MaxValue&&!G->isTrav[i])
{
DeepGraphOne(G, i);
}
}
}
void DeepGraph(Graph *G)
{
for (int i = 0; i < G->VNum; i++)
G->isTrav[i] = 0;
cout << "深度优先遍历" << endl;
for (int i = 0; i < G->VNum; i++)
{
if (!G->isTrav[i])
{
DeepGraphOne(G, i);
}
}
cout << "\n" << endl;
}
int main()
{
Graph G;
cout << "请输入生成图的类型,0无像,1有像" << endl;
cin >> G.GType;
cout << "请输入顶点数量" << endl;
cin >> G.VNum;
cout << "请输入边的数量" << endl;
cin >> G.EdgeNum;
ClearGraph(&G);
CreateGraph(&G);
cout << "图的邻接矩阵如下" << endl;
OutGraph(&G);
cout << "深度优先搜索" << endl;
DeepGraph(&G);
system("pause");
return 0;
}