邻接矩阵:
#include <iostream>
using namespace std;
#define maxsizes 105
typedef int Type;
// 顶点定义
typedef struct{
Type data;
}vertex;
// 邻接矩阵定义
typedef struct{
int n,e;
vertex vex[maxsizes];
int edges[maxsizes][maxsizes];
}MGraph;
// 访问结点
void visitvertex(MGraph G,int x){
cout<<" "<<x;//G.vex[x].data;
}
// 深度优先遍历
bool visit[maxsizes]={false};
void DFS(MGraph &G,int v){
visit[v]=true;
visitvertex(G,v);
for(int i=1;i<=G.n;++i){
if(visit[i]==false && G.edges[v][i]==1){
DFS(G,i);
}
}
}
/*
7 7
1 2
1 3
3 6
2 5
5 4
5 7
4 7
// 1 2 5 4 7 3 6
*/
// 图的深度优先遍历算法 (邻接矩阵)
int main(void){
MGraph G;
cin>>G.n>>G.e;
for(int i=1;i<=G.e;++i){ // 邻接矩阵
int temp1,temp2;
cin>>temp1>>temp2;
G.edges[temp1][temp2]=1; // 无向图
G.edges[temp2][temp1]=1;
}
DFS(G,2);
return 0;
} // jinzheng 2018.9.19 20:00
邻接表代码:
#include <iostream>
#include <vector>
using namespace std;
vector<int> G[1005];
bool visit[1005]={false};
// 访问结点
void visited(int x){
cout<<" "<<x;
}
// 深度优先遍历
void dfs(int v){
visit[v] = true;
visited(v);
for(int i=0;i<G[v].size();++i){
if(visit[G[v][i]]==false){
dfs(G[v][i]);
}
}
}
/*
7 7
1 2
1 3
3 6
2 5
5 4
5 7
4 7
*/
// 图深度优先遍历 (邻接表)
int main(void){
int n,e;
cin>>n>>e;
for(int i=1;i<=e;++i){ // 邻接表
int temp1,temp2;
cin>>temp1>>temp2;
G[temp1].push_back(temp2);
G[temp2].push_back(temp1);
}
dfs(7);
return 0;
} // jinzheng 2018.9.19 21:09