24h購物| | PChome| 登入
2009-10-02 22:35:50| 人氣774| 回應0 | 上一篇 | 下一篇

板橋高中98資訊能力競賽 最短距離

推薦 0 收藏 0 轉貼0 訂閱站台

作法 : BFS擴張

從起點BFS擴張,若到終點則輸出,若沒辦法到達則輸出0

/***********************************************************/

#include<stdlib.h>
#include<stdio.h>
main()
{
   int t,n,m;
   scanf("%d",&t);
   while(t--)
       {
          scanf("%d %d",&n,&m);
          int map[101][101]={0},sx,sy,ex,ey,a,b,c;
          char s[101];
          scanf("%d %d %d %d",&sx,&sy,&ex,&ey);
          for(a=0;a<n;a++)
             {
                scanf("%s",s);
                for(b=0;b<m;b++)
                   if(s[b]=='1') map[a][b]=-1;
             }
          int queue[10000][2]={0},top=0,find=0;
          queue[0][0]=sx-1;queue[0][1]=sy-1;
          for(a=0;a<=top;a++)
             {
               int xx=queue[a][0],yy=queue[a][1];
               if(xx==ex-1&&yy==ey-1) {find=1;break;}
               if(map[xx+1][yy]==0&&xx+1<n)
                  {
                     map[xx+1][yy]=map[xx][yy]+1;
                     top++;
                     queue[top][0]=xx+1;queue[top][1]=yy;
                  }
               if(map[xx-1][yy]==0&&xx-1>=0)
                  {
                     map[xx-1][yy]=map[xx][yy]+1;
                     top++;
                     queue[top][0]=xx-1;queue[top][1]=yy;
                  }
               if(map[xx][yy+1]==0&&yy+1<m)
                  {
                     map[xx][yy+1]=map[xx][yy]+1;
                     top++;
                     queue[top][0]=xx;queue[top][1]=yy+1;
                  }
               if(map[xx][yy-1]==0&&yy-1>=0)
                  {
                     map[xx][yy-1]=map[xx][yy]+1;
                     top++;
                     queue[top][0]=xx;queue[top][1]=yy-1;
                  }
             }
          if(find==1)
          printf("%d\n",map[ex-1][ey-1]+1);
          else printf("0\n");
         /* for(a=0;a<n;a++)
             {
                for(b=0;b<m;b++)
                   printf("%3d ",map[a][b]);
                printf("\n");
             }*/
       }
   return 0;
}
/*
2
5 6 3 1 3 4
000000
011101
000010
011000
000010

*/

台長: 來源不明
人氣(774) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: 資訊競賽 |
此分類下一篇:板橋高中98-2模擬測驗 A-排列組合
此分類上一篇:板橋高中98資訊能力競賽 直線最小距離和

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文