#include"StdAfx.h"
#include <iostream>
#include<string>
#include<queue>
using namespace std;
#define maxnode 64
typedef struct graph{ //
string vexs[10];
int arc[10][10];
int vexnum,arcnum;
}Graph;
int visited[10];
int GraphLocateVertex(Graph G,string vex);
Graph GraphCreate()
{
Graph G;
int i,j,m,n;
string vex1,vex2;
cout<<"input the num of the graph's vex and arc:"<<endl;
cin>>G.vexnum>>G.arcnum;
for(i=0;i<G.vexnum;i++)
{
for(j=0;j<G.vexnum;j++)
{
G.arc[i][j]=0;
}
}
cout<<"input the information of the graph's vex :"<<endl;
for(i=0;i<G.vexnum;i++)
{
cin>>G.vexs[i];
}
cout<<"input the information of the graph's arc:"<<endl;
for(j=0;j<G.arcnum;j++)
{
cin>>vex1>>vex2;
m=GraphLocateVertex(G,vex1);
n=GraphLocateVertex(G,vex2);
G.arc[m][n]=1;
}
return G;
}
int GraphLocateVertex(Graph G,string vex)
{
int i,result;
for(i=0;i<G.vexnum;i++)
{
if(vex==G.vexs[i])
{
result=i;
}
}
return result;
}
int GraphFirstAdj(Graph G,int v)
{
int i;
for(i=0;i<G.vexnum;i++)
{
if(G.arc[v][i]==1)
return i;
}
return -1;
}
int GraphNextAdj(Graph G,int v,int w)
{
int i;
for(i=w+1;i<G.vexnum;i++)
{
if(G.arc[v][i]==1)
return i;
}
return -1;
}
void DFS(Graph G,int v)
{
int w;
visited[v]=1;
cout<<G.vexs[v]<<" ";
for(w=GraphFirstAdj(G,v);w>=0;w=GraphNextAdj(G,v,w))
{
if(!visited[w])
DFS(G,w);
}
}
void DFSTraverse(Graph G)
{
int i;
for(i=0;i<G.vexnum;i++)
visited[i]=0;
for(i=0;i<G.vexnum;i++)
{
if(!visited[i])
{
DFS(G,i);
}
}
}
void BFSTraverse(Graph G)
{
int i,v,w;
for(i=0;i<G.vexnum;i++)
{
visited[i]=0;
}
queue<int> q;
q.empty();
for(i=0;i<G.vexnum;i++)
{
if(!visited[i])
{
visited[v]=1;
q.push(i);
while(!q.empty())
{
v=q.front();
q.pop();
cout<<G.vexs[v]<<" ";
for(w=GraphFirstAdj(G,v);w>=0;w=GraphNextAdj(G,v,w))
{
if(!visited[w])
{
q.push(w);
}
}
}
}
}
}
int main()
{
Graph Gt;
Gt=GraphCreate();
cout<<"DFS:";
DFSTraverse(Gt);
cout<<endl;
cout<<"BFS:";
BFSTraverse(Gt);
cout<<endl;
system("pause");
return 0;
}
图的创建BFS DFS
最新推荐文章于 2022-09-20 16:40:27 发布