最近学习了图,下面是关于图的遍历几个栗子
#include "iostream"
#define MAXSIZE 4
using namespace std;
struct ArcNode//边表
{
int adjvex;
ArcNode *next;
};
struct VertexNode //顶点表
{
int vertex;
ArcNode *firstedge;
};
VertexNode *V = new VertexNode[MAXSIZE];
int visited[MAXSIZE];
//5.判断a顶点是否有路径到 b顶点
/**********************************************************/
bool Ergodic_Vertex(int a,int b)//返回1表示有路径能到达 (起点,终点)
{
ArcNode *p;
visited[a]=1;
if(V[a].vertex == V[b].vertex) return 1;
else
{
p=V[a].firstedge;
while(p!=NULL)
{
int temp = p->adjvex;
if(visited[temp]==0)
{
if(Ergodic_Vertex(temp,b))
return 1;
}
p=p->next;
}
}
}
/*******************************************************/
//8.判断a顶点是否有长度为k的路径到 b顶点
/*******************************************************/
void Ergodic_Vertex(int a,int b,int k,int K,int *v)//输出几个OK表示有几条 (起点,终点,路径长度,0,结点数组)
{
int KK=K;
int visite[MAXSIZE];
for(int i=0;i<MAXSIZE;i++)
{
visite[i] = v[i];
}
ArcNode *p;
visite[a]=1;
p=V[a].firstedge;
KK=KK+1;
while(p->adjvex!=-1)
{
int temp = p->adjvex;
if(visite[temp]==0)
{
if ((k == KK) && (temp==b))//去掉+1
{
cout<<"OK!"<<endl;
}
Ergodic_Vertex(temp,b,k,KK,visite);//去掉+1
}
p=p->next;
}
}
/*******************************************************/
void build()//邻接表创建图
{
ArcNode *p=NULL;
ArcNode *p2=NULL;
int temp;
cout<<"以0结束"<<endl;
for(int i=0;i<4;i++)
{
p=V[i].firstedge = new ArcNode;
cout<<i+1<<"周围的顶点为:"<<endl;
cin>> temp;
p->adjvex = temp-1;
if(p->adjvex == -1)
{
V[i].firstedge=NULL;
}
while(p->adjvex!=-1)
{
p2 = new ArcNode;
cout<<i+1<<"周围的顶点为:"<<endl;
cin>> temp;
p2->adjvex=temp-1;
p->next = p2;
p=p2;
}
system("cls");
cout<<"以0结束"<<endl;
}
cout<<"构建完成"<<endl;
}
void clear_V()//初始化
{
for(int i = 0;i < 5; i++)
{
V[i].vertex = i+1;
}
}