邻接矩阵的深度遍历和广度遍历
图的定义
#ifndef G_H
#include<iostream>
using namespace std;
#define OK 1
#define ERROR -1
#define MaxInt 32767
#define MVNum 100
typedef int Status;
typedef char VerTexType;
typedef int ArcType;
typedef struct
{
VerTexType vexs[MVNum];
ArcType arcs[MVNum][MVNum];
int vexnum,arcnum;
}AMGraph;
Status CreateUDN(AMGraph &G);
void DFS_AM(AMGraph G,int v);
void BFS(AMGraph G,int v);
函数的定义
#include"G.h"
Status CreateUDN(AMGraph &G)
{
int i,j,k,w;
cout<<"节点数:";
cin>>G.vexnum;
cout<<"总边数:" ;
cin>>G.arcnum;
for(i=1;i<=G.vexnum;i++)
for(j=1;j<=G.vexnum;j++)
G.arcs[i][j]=0;
cout<<"输入节点信息:";
for(i=0;i<G.vexnum;i++)
{
cin>>G.vexs[i];
}
for(k=1;k<=G.arcnum;++k)
{
VerTexType v1,v2;
cout<<"输入依附的顶点和权值:";
cin>>v1>>v2>>w;
cout<<endl;
int p_x,p_y;
for(int q=0;q<G.vexnum;q++)
{
if(G.vexs[q]==v1)
p_x=q+1;
}
for(int q1=0;q1<G.vexnum;q1++)
{
if(G.vexs[q1]==v2)
p_y=q1+1;
}
G.arcs[p_x][p_y]=w;
G.arcs[p_y][p_x]=G.arcs[p_x][p_y];
}
return OK;
}
int visited[MVNum];
void DFS_AM(AMGraph G,int v)
{
int w;
cout<<v<<" ";
visited[v]=1;
for(w=1;w<=G.vexnum;w++)
if((G.arcs[v][w]!=0)&&(visited[w]!=1)) DFS_AM(G,w);
}
int visited1[MVNum];
void BFS(AMGraph G,int v)
{
cout<<"\n"<<v<<" ";
visited1[v]=1;
int q[100],front=1,rear=1;
q[rear++]=v;
while(front!=rear)
{
int now=q[front++];
for(int i=1;i<=G.vexnum;i++)
{
if(G.arcs[now][i]&&!visited1[i])
{
visited1[i]=1;
cout<<" "<<i<<"\t";
q[rear++]=i;
}
}
}
}
主函数
#include"G.h"
int main()
{int i, j;
AMGraph G;
CreateUDN(G);
for(i=1;i<=G.vexnum;i++)
{
for(j=1;j<=G.vexnum;j++)
{
cout<<G.arcs[i][j]<<"\t";
}
cout<<endl;
}
int v;
cout<<"访问的顶点:";
cin>>v;
cout<<"深度遍历:";
DFS_AM(G,v);
cout<<"广度遍历:";
BFS(G,v);
return OK;
}