第17周 啊哈算法 图的遍历算法-最少转机

问题及代码:

/*广度优先搜索算法-最少转机*/
#include<stdio.h>

struct note
 {
  int x; //城市编号
  int s; //转机次数
 };

int main()
 {
   int i,j,n,m,a,b,cur,e[51][51]={0},book[51]={0},head,tail;
   int start,end,flag=0;
   struct note que[2501]; 
   scanf("%d %d",&n,&m,&start,&end);

   for(i=1;i<=n;i++)
      for(j=1;j<=n;j++)
       if(i==j) e[i][j]=0;
       else e[i][j]=9999999;
   
   for(i=1;i<=m;i++)
    {
      scanf("%d %d",&a,&b);
      e[a][b]=1;
      e[b][a]=1;
    }
          
   
   head=1;
   tail=1;

   que[tail].x=start;
   que[tail].s=0;
   tail++;
   book[1]=start; //标记start号城市已在队列中 

   while(head<tail)
    {
     cur=que[head].x;
     for(i=1;i<=n;i++)
       {
         if(e[cur][i]==1 && book[i]==0)
          {
            que[tail].x=i;
            que[tail].s=que[head].s+1; //转机次数+1 
            tail++;
            book[i]==1;
          }
        if(que[tail].x==end)
         flag=1;
         break; //退出内循环
       }
    if(flag==1)
       break; //退出外循环
    head++;
 }

   printf("%d",que[tail-1].s); //输出最少的转机次数
            
   getchar();getchar();
   return 0;
 }

结果出错!为何?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值