图的深度优先遍历
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
#define MaxValue 32700
const int NumEdges = 50; //边条数
const int NumVertices = 10; //顶点个数
typedef char VertexData; //顶点数据类型
typedef int EdgeData; //边上权值类型
typedef struct {
VertexData vexList[NumVertices]; //顶点表
EdgeData Edge[NumVertices][NumVertices];
//邻接矩阵, 可视为边之间的关系
int n, e; //图中当前的顶点个数与边数
} MTGraph;
int visited[100];
void DFS(MTGraph G,int v){
visited[v]=1;
cout<<v<<" ";
for(int i=1;i<=G.n;i++){
if( (!visited[i]) && G.Edge[v][i]<MaxValue) DFS(G,i);
}
}
int main(){
MTGraph G;
int s,t,path;
cout<<"请输入顶点个数"<<endl;
cin>>G.n;
cout<<"请输入边数"<<endl;
cin>>G.e;
for(int i=1;i<=G.n;i++){
for(int j=1;j<=G.n;j++){
G.Edge[i][j]=MaxValue;
}
}
cout<<"请输入各边权值"<<endl;
for(int i=1;i<=G.e;i++){
cin>>s>>t>>path;
G.Edge[s][t]=path;
}
for(int i=1;i<=G.n;i++){
visited[i]=0;
}
DFS(G,1);
cout<<endl;
return 0;
}
图的广度优先遍历
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<queue>
using namespace std;
#define MaxValue 32700
const int NumEdges = 50; //边条数
const int NumVertices = 10; //顶点个数
typedef char VertexData; //顶点数据类型
typedef int EdgeData; //边上权值类型
typedef struct {
VertexData vexList[NumVertices]; //顶点表
EdgeData Edge[NumVertices][NumVertices];
//邻接矩阵, 可视为边之间的关系
int n, e; //图中当前的顶点个数与边数
} MTGraph;
int visited[100];
queue<int>Q;
void BFS(MTGraph G,int v) {
Q.push(v);
int t;
while(!Q.empty()) {
t=Q.front();
Q.pop();
visited[t]=1;
cout<<t<<" ";
for(int i=1; i<=G.n; i++) {
if( (!visited[i]) && G.Edge[t][i]<MaxValue) Q.push(i);
}
}
}
int main() {
MTGraph G;
int s,t,path;
cout<<"请输入顶点个数"<<endl;
cin>>G.n;
cout<<"请输入边数"<<endl;
cin>>G.e;
for(int i=1; i<=G.n; i++) {
for(int j=1; j<=G.n; j++) {
G.Edge[i][j]=MaxValue;
}
}
cout<<"请输入各边权值"<<endl;
for(int i=1; i<=G.e; i++) {
cin>>s>>t>>path;
G.Edge[s][t]=path;
}
for(int i=1; i<=G.n; i++) {
visited[i]=0;
}
BFS(G,1);
cout<<endl;
return 0;
}