#include
struct
{
int city,pre;
} sq[100];
int jz[50][50];
int qh,qe,n,visited[100];
void out(int qe)//输出结果
{
if(sq[qe].pre==0)
printf("%d",sq[qe].city);
else
{
out(sq[qe].pre);
printf("--%d",sq[qe].city);
}
}
void createGraph(int n)//创建邻接矩阵
{
int i,j;
for(i=0; i
for(j=0; j
scanf("%d",&jz[i][j]);
}
void search(int p,int q)//查找
{
int i;
qh=0;
qe=1;
sq[1].city=p;
sq[1].pre=0;
visited[1]=1;
while(qh!=qe) //当队不为空
{
qh=qh+1; //结点出队
for(i=0; i
if(jz[sq[qh].city][i]==1&&visited[i]==0) //如果从城市sq[qh].city可以直接到达城市i,且城市i没有访问过
{
qe=qe+1;//结点入队
sq[qe].city=i;
sq[qe].pre=qh;
visited[i]=1;
if(sq[qe].city==q)
{
printf("基本路径为:");
out(qe);
return ;
}
}
}
printf("两点不连通!\n");
}
int main()
{
int i,p,q;
printf("请输入顶点个数:");
scanf("%d",&n);
printf("请输入邻接矩阵:\n");
createGraph(n);
for(i=0; i
visited[i]=0;
printf("请输入两结点:");
scanf("%d%d",&p,&q);
search(p,q);
return 0;
}
/*
0 1 1 1 0 1 0 0
1 0 0 0 0 1 0 0
1 0 0 1 1 0 0 0
1 0 1 0 0 0 1 0
0 0 1 0 0 0 1 1
1 1 0 0 0 0 0 1
0 0 0 1 1 0 0 1
0 0 0 0 1 1 1 0
*/