邻接矩阵的DFS:
#include<bits/stdc++.h>
using namespace std;
typedef char VertexType;
typedef int EdgeType;
#define MAXSIZE 9
#define MAXEDGE 15
#define MAXVEX 9
typedef struct{
int numVertexes , numEdges;
VertexType vexs[MAXVEX];
EdgeType arc[MAXVEX][MAXVEX];
}MGraph;
bool visited[MAXVEX];
void DFS(MGraph MG,int i){
int j;
visited[i] = true;
cout<<MG.vexs[i]<<' ';
for(j = 0;j<MG.numVertexes;j++)
if(MG.arc[i][j]==1&&!visited[j])
DFS(MG,j);
}
void DFSTravrrse(MGraph MG){
int i;
for(i =0;i<MG.numVertexes;i++)
visited[i] =false;
for(i = 0;i<MG.numVertexes;i++)
if(!visited[i])
DFS(MG,i);
}
void CreateMGraph(MGraph *Gp){
int i,j,k,w;
cout << "请输入顶点数和边数(空格分隔):" << endl;
cin >> Gp->numVertexes >> Gp->numEdges;
cout<<"请输入顶点name"<<endl;
for(i = 0;i<Gp->numVertexes;i++)
cin>>Gp->vexs[i];
for(i = 0;i<Gp->numEdges;i++){
for(j = 0;j<Gp->numEdges;j++){
if(i == j) Gp->arc[i][j]=0;
else Gp->arc[i][j] = INFINITY;
}
}
for(k = 0;k < Gp->numEdges;k++){
cout<<"请输入边(vi, vj)的上标i,下标j和权值w(空格分隔):" << endl;
cin>> i >> j >> w;
Gp->arc[i][j] = w;
Gp->arc[j][i] = w;
}
}
int main(){
MGraph MG;
CreateMGraph(&MG);
DFSTravrrse(MG);
system("pause");
return 0;
}
邻接表的DFS
#include<bits/stdc++.h>
using namespace std;
typedef char VertexType;
typedef int EdgeType;
#define MAXSIZE 9
#define MAXEDGE 15
#define MAXVEX 9
typedef struct EdgeNode
{
int adjvex;
int weight;
struct EdgeNode *next;
} EdgeNode;
typedef struct VertexNode
{
int in;
char data;
EdgeNode *firstedge;
} VertexNode, AdjList[MAXVEX];
typedef struct
{
AdjList adjList;
int numVertexes, numEdges;
} GraphAdjList;
bool visited[MAXVEX];
void DFS(GraphAdjList *GL, int i)
{
EdgeNode *p;
visited[i] = true;
cout << GL->adjList[i].data << ' ';
p = GL->adjList[i].firstedge;
while (p)
{
if (!visited[p->adjvex])
DFS(GL, p->adjvex);
p = p->next;
}
}
void DFSTraverse(GraphAdjList *GL)
{
int i;
for (i = 0; i < GL->numVertexes; i++)
visited[i] = false;
for (i = 0; i < GL->numVertexes; i++)
if (!visited[i])
DFS(GL, i);
}
void CreateALGraph(GraphAdjList *Gp)
{
int i, j, k;
EdgeNode *pe;
cout << "输入顶点数和边数(空格分隔):" << endl;
cin >> Gp->numVertexes >> Gp->numEdges;
cout << "输入顶点信息:" << endl;
for (i = 0 ; i < Gp->numVertexes; i++)
{
cin >> Gp->adjList[i].data;
Gp->adjList[i].firstedge = NULL;
}
for (k = 0; k < Gp->numEdges; k++)
{
cout << "输入边(vi,vj)的顶点序号i,j(空格分隔):" << endl;
cin >> i >> j;
pe = (EdgeNode *)malloc( sizeof(EdgeNode));
pe->adjvex = j;
pe->next = Gp->adjList[i].firstedge;
Gp->adjList[i].firstedge = pe;
pe = (EdgeNode *)malloc( sizeof(EdgeNode));
pe->adjvex = i;
pe->next = Gp->adjList[j].firstedge;
Gp->adjList[j].firstedge = pe;
}
}
int main(){
GraphAdjList MG;
CreateALGraph(&MG);
DFSTraverse(&MG);
system("pause");
return 0;
}