hdu1242Rescue

http://acm.hdu.edu.cn/showproblem.php?pid=1242

刚开始由于 没标记已走过的 导致RE TLE 纠结了好久 同样纠结为什么正着搜就WA

View Code
 1 #include <stdio.h>
 2 #include<string.h>
 3 int n, m,p = 0,q = 0;
 4 char c[201][201];
 5 typedef struct queue
 6 {
 7     int num, x, y;
 8 }st;
 9 st Q[100001];
10 void inque(int a, int b)
11 {
12     q++;
13     Q[q].x = a;
14     Q[q].y = b;
15 }
16 int main()
17 {
18     int i,j,r[2],k = 0,mov[2]={-1,1},flag =0;
19     while(scanf("%d%d%*c", &n, &m)!=EOF)
20     {
21         flag = 0;
22         memset(Q,0,sizeof(Q[0]));
23         for(i = 1 ; i <= n ; i++)
24         {
25             for(j = 1 ; j <= m ; j++)
26             {
27                 scanf("%c", &c[i][j]);
28                 if(c[i][j] == 'a')
29                 {
30                     r[0] = i;
31                     r[1] = j;
32                 }
33             }
34             getchar();
35         }
36         p = 0;
37         q = 1;
38         Q[q].x = r[0];
39         Q[q].y = r[1];
40         Q[q].num = 0;
41         do
42         {
43             p++;
44             int x1 = Q[p].x;
45             int y1 = Q[p].y;
46             for(j = 0 ; j < 2 ; j++)
47             {
48                 if(x1+mov[j]>0&&x1+mov[j]<=n&&(c[x1+mov[j]][y1]=='.'||c[x1+mov[j]][y1]=='x'||c[x1+mov[j]][y1]=='r'))
49                 {
50                     inque(x1+mov[j],y1);
51                     if(c[x1+mov[j]][y1]=='x')
52                     Q[q].num = Q[p].num+2;
53                     else
54                     Q[q].num = Q[p].num+1;
55                     if(c[x1+mov[j]][y1]=='r')
56                     {
57                         flag = 1;
58                         break;
59                     }
60                     c[x1+mov[j]][y1] = '#';
61                 }
62                 if(y1+mov[j]>0&&y1+mov[j]<=m&&(c[x1][y1+mov[j]]=='.'||c[x1][y1+mov[j]]=='x'||c[x1][y1+mov[j]]=='r'))
63                 {
64                     inque(x1,y1+mov[j]);
65                     if(c[x1][y1+mov[j]]=='x')
66                     Q[q].num = Q[p].num+2;
67                     else
68                     Q[q].num = Q[p].num+1;
69                     if(c[x1][y1+mov[j]]=='r')
70                     {
71                         flag = 1;
72                         break;
73                     }
74                     c[x1][y1+mov[j]] = '#';
75                 }
76             }
77             if(flag == 1)
78             break;
79         }while(p!=q);
80         if(!flag)
81         printf("Poor ANGEL has to stay in the prison all his life.\n");
82         else
83         {
84             printf("%d\n",Q[q].num);
85         }
86     }
87     return 0;
88 }
原文地址:https://www.cnblogs.com/shangyu/p/2588922.html