利用邻接矩阵的数据结构表示图,并实现DFS
#include "stdafx.h"
#include<iostream>
#include<stdio.h>
#define Acsii -48
#define MaxVex 100
#define INF 65535
bool visited[MaxVex];
typedef char VertexType;
typedef int EdgeType;
using namespace std;
typedef struct{
VertexType vexs[MaxVex];
EdgeType arc[MaxVex][MaxVex];
int numVertexs, numEdges;
}AdjacencyMatrix;
void CreateAMatrix(AdjacencyMatrix* AM)
{
cout << "输入顶点数和边数:";
cin >> AM->numVertexs >> AM->numEdges;
cout << "==============================\n";
cout << "输入各个顶点:" << endl;
for (int i = 0; i < AM->numVertexs; i++)
{
char v;
cout << "顶点%d:" << i+1;
cin >> v;
AM->vexs[i] = v;
}
for (int i = 0; i < AM->numVertexs; i++)
{
for (int j = 0; j < AM->numVertexs; j++)
{
AM->arc[i][j] = INF;
}
}
cout << "==============================\n";
for (int k = 0; k < AM->numEdges; k++)
{
char i, j, w;
cout << "输入边(vi,vj)中的下标i和j和权重w:" ;
cin >> i >> j >> w;
AM->arc[i+Acsii][j+Acsii] = w;
AM->arc[j][i] = AM->arc[i][j];
}
}
void DisplayAMatrix(AdjacencyMatrix* AM)
{
for (int i = 0; i < AM->numVertexs; i++)
{
for (int j = 0; j < AM->numVertexs; j++)
{
cout<<AM->arc[i][j]<<" ";
}
cout << endl;
}
}
void DFS(AdjacencyMatrix* AM,int i)
{
visited[i] = 1;
cout << AM->vexs[i];
for (int j = 0; j < AM->numVertexs; j++)
{
if (AM->arc[i][j] != INF && !visited[j])
{
DFS(AM, j);
}
}
}
void DFSTraverse(AdjacencyMatrix* AM)
{
for (int i = 0; i < AM->numVertexs; i++)
{
visited[i] = 0;
}
for (int i = 0; i < AM->numVertexs; i++)
{
if (!visited[i])
DFS(AM, i);
}
}
int main(){
AdjacencyMatrix G,h;
CreateAMatrix(&G);
DisplayAMatrix(&G);
DFSTraverse(&G);
return 0;
}