24h購物| | PChome| 登入
2009-07-29 21:17:04| 人氣947| 回應0 | 上一篇 | 下一篇

ACM 10102 Q10102: The path in the colored field

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

作法: BFS

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

#include<stdio.h>
#include<stdlib.h>
main()
{
 int n;
 char x[101];
 while(scanf("%d",&n)==1)
     {
       int a,b,c,d;
       int map[102][102]={0};
       for(a=0;a<n;a++)
        {
          scanf("%s",x);
           for(b=0,c=1;b<n;b++,c++)
              map[a+1][c]=x[b];
        } 
       int max=0;
       for(a=1;a<=n;a++)
           for(b=1;b<=n;b++)
               if(map[a][b]=='1')
                   {
                      int queue[10001][2]={0},top=0,appear[102][102]={0},ans;
                      queue[0][0]=a;queue[0][1]=b;
                      for(c=0;c<=top;c++)
                         {
                           int x=queue[c][0],y=queue[c][1];
                           if(map[x][y]=='3') {ans=appear[x][y];break;}
                            if(map[x+1][y]!=0&&appear[x+1][y]==0)
                               {
                                  top++;
                                  queue[top][0]=x+1;
                                  queue[top][1]=y;
                                  appear[x+1][y]=appear[x][y]+1;
                               }
                           if(map[x][y+1]!=0&&appear[x][y+1]==0)
                               {
                                  top++;
                                  queue[top][0]=x;
                                  queue[top][1]=y+1;
                                  appear[x][y+1]=appear[x][y]+1;
                               }
                           if(map[x-1][y]!=0&&appear[x-1][y]==0)
                               {
                                  top++;
                                  queue[top][0]=x-1;
                                  queue[top][1]=y;
                                  appear[x-1][y]=appear[x][y]+1;
                               }
                           if(map[x][y-1]!=0&&appear[x][y-1]==0)
                               {
                                  top++;
                                  queue[top][0]=x;
                                  queue[top][1]=y-1;
                                  appear[x][y-1]=appear[x][y]+1;
                               }
                         }
                      if(ans>max) max=ans;
                   }
        printf("%d\n",max);
     }
 return 0;
}

台長: 來源不明
人氣(947) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: ACM |
此分類下一篇:ACM 294 Q294: Divisors
此分類上一篇:ACM 10364 Q10364: Square

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