关于pta喊山的问题,来看看代码,部分正确,有段错误😭

img

img

img

img

#include <stdio.h>
int main()
{
int n,m,k,i,j,p,f;
int v1,v2;
scanf("%d%d%d",&n,&m,&k);
int b[n+2][n+2];//邻接矩阵
int a[k+2];//存储要查询的山头
int c[n+2]; //传输的距离
int d[n+2];//队列
int e[n+2];//用来标记是否访问过
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
b[i][j]=0;
}
}
for(i=1;i<=n;i++)
{
c[i]=0;
e[i]=0;
}
for(i=1;i<=m;i++)
{
scanf("%d%d",&v1,&v2);
b[v1][v2]=1;
b[v2][v1]=1;
}
for(i=1;i<=k;i++)
{
scanf("%d",&a[i]);
}
int t,flag,z=-1,x,y;
for(i=1;i<=k;i++)
{
flag=0;
z=-1;
int front=0,rear=0;
d[rear++]=a[i];
x=0,y=0;
e[a[i]]=1;
while(1)
{
t=d[front++];
for(j=1;j<=n;j++)
{
if(b[t][j]!=0&&e[j]==0)
{
flag=1;
c[j]=x+1;
d[rear++]=j;
e[j]=1;
y=c[j];
}
}
if(flag==1)
{
x=y;
}
flag=0;
if(front==rear)
break;
}
int max=0;
for(p=1;p<=n;p++)
{
if(c[p]>max)
{
x=p;
max=c[p];
}
}
if(max!=0)
printf("%d\n",x);
else
printf("%d\n",0);
for(f=1;f<=n;f++)
{
c[f]=0;
e[f]=0;
}
}
}

对于你这个题目可以参考如下链接:

如果对你有帮助,可以给我个采纳吗,谢谢!!

.对v1和v2的输入要判断是否越界