Lightoj 1066 Gathering Food(BFS)

题目链接:

http://lightoj.com/volume_showproblem.php?problem=1066

题目很容易,广搜和深搜应该都行,我个人认为要注意的是‘A’-->‘ . ’

AC代码:

 1 #include <iostream>
 2 #include<cstdio>
 3 #include<queue>
 4 #include <cstring>
 5 using namespace std;
 6 char s[20][20],ch[50];
 7 int t,n,fine,starex,starey,sum,flag;
 8 struct node
 9 {
10     int x,y,f;
11 };
12 int main()
13 {
14     struct node que[2005];
15     int book[20][20];
16     int a[4]={1,-1,0,0},b[4]={0,0,1,-1};
17     int head,tail,tx,ty;
18     strcpy(ch,"ABCDEFGHIJKLMNOPQRSTUVWXYZ");
19     while(~scanf("%d",&t))
20     {
21         for(int v=1;v<=t;v++)
22         {
23             scanf("%d",&n);
24             for(int i=0;i<n;i++)
25             scanf("%s",s[i]);
26             fine=0;
27             for(int i=0;i<n;i++)
28             {
29                 for(int j=0;j<n;j++)
30                 {
31                     if(s[i][j]>='A'&&s[i][j]<='Z')
32                     {
33                         fine=max(s[i][j]-'A',fine);
34                         if(s[i][j]=='A')
35                         {
36                             starex=i;starey=j;
37                             s[i][j]='.';
38                         }
39                     }
40                 }
41             }
42             flag=0;sum=0;
43             head=1;tail=1;
44             memset(que,0,sizeof(que));
45             que[tail].x=starex;que[tail].y=starey;
46             que[tail].f=0;tail++;
47             memset(book,0,sizeof(book));
48             book[starex][starey]=1;
49             while(head<tail)
50             {
51                 for(int k=0;k<4;k++)
52                 {
53                     tx=que[head].x+a[k];
54                     ty=que[head].y+b[k];
55                     if(tx<0||tx>=n||ty<0||ty>=n)
56                     continue;
57                     if((s[tx][ty]=='.'||s[tx][ty]==ch[flag+1])&&book[tx][ty]==0)
58                     {
59                         book[tx][ty]=1;
60                         que[tail].x=tx;
61                         que[tail].y=ty;
62                         que[tail].f=que[head].f+1;
63                         tail++;
64                     }
65                     if(s[tx][ty]==ch[flag+1])
66                     {
67                         s[tx][ty]='.';
68                         flag++;
69                         sum=sum+que[tail-1].f;
70                         head=0;tail=1;
71                         memset(que,0,sizeof(que));
72                         que[tail].x=tx;que[tail].y=ty;
73                         que[tail].f=0;
74                         memset(book,0,sizeof(book));
75                         book[tx][ty]=1;
76                         tail++;
77                         break;
78                     }
79                 }
80                 if(flag==fine)
81                 break;
82                 head++;
83             }
84             printf("Case %d: ",v);
85             if(flag==fine)
86             printf("%d\n",sum);
87             else
88             printf("Impossible\n");
89         }
90     }
91     return 0;
92 }
View Code

 

posted @ 2016-08-12 15:43  Wally的博客  阅读(213)  评论(0编辑  收藏  举报