码迷,mamicode.com
首页 > 其他好文 > 详细

XXrl找bug hhh

时间:2018-12-14 22:56:25      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:dia   class   stream   empty   type   兼容   不能   开始   char   

http://oj.acm.zstu.edu.cn/JudgeOnline/problem.php?id=4434

没有用队列,疯狂找不到bug,后来发现很简单的判断时==n和m了,本来心花怒放,测试数据也过了。然而,呜呼,许久不见的re;

好的,re,re,重新,重新!!

然而,不死心的在开更大一点,发现是WA。

那什么时候bfs用数组就行了呢。。

技术分享图片
 1 #include<cstdio>
 2 #include<cmath>
 3 #include<cstring>
 4 #include<iostream>
 5 #include<algorithm>
 6 #include<queue>
 7 using namespace std;
 8 int fa[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
 9 char mp[505][505];
10 int ma[505][505],n,m,r,s;
11 int ans;
12 struct node
13 {
14    int x,y,step;
15 }v[100000];
16 bool pan(int x,int y)
17 {
18   if(x<0||y<0||x>=n||y>=m) return false;
19   return true;
20 }
21 void bfs()
22 {
23     v[r].x=0;
24     v[r].y=0;
25     v[r].step=0;
26     ma[0][0]=1;
27     r++;s=0;
28     int d=0;
29     while(s<r)
30     {
31      for(int i=0;i<4;i++)
32      {
33         int x=v[s].x+fa[i][0];
34         int y=v[s].y+fa[i][1];
35         if(pan(x,y)&&ma[x][y]==0)
36         {
37         if(x==n-1&&y==m-1)
38         {
39          ans=v[s].step+1;
40          ma[x][y]=1;
41          d=1;
42          break;
43         }
44         else if(mp[x][y]==.)
45            {
46             v[r].x=x;
47             v[r].y=y;
48             v[r].step=v[s].step+1;
49             r++;
50             ma[x][y]=1;    //各种路里mark不会相冲突吗
51            }
52         }
53 
54      }
55      if(d) break;
56      s++;
57     }
58 }
59 int main()
60 {
61     int t;
62     scanf("%d",&t);
63     while(t--)
64     {
65         scanf("%d%d",&n,&m);
66         for(int i=0;i<n;i++)
67         scanf("%s",mp[i]);
68         memset(ma,0,sizeof(ma));
69         r=0;
70         ans=0;
71         bfs();
72         printf("%d\n",ans);
73     }
74     return 0;
75 }
RE,数组表队列
技术分享图片
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef pair<int,int>node; //pair!! first
 4 int fa[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
 5 char mp[505][505];
 6 int ma[505][505],n,m;
 7 void bfs()
 8 {
 9     queue<node>q;
10     node now={1,1};
11     ma[1][1]=1;
12     while(!q.empty()) q.pop(); //clear
13     q.push(now);
14     while(!q.empty())
15     {
16         now=q.front();
17         q.pop();
18         for(int i=0;i<4;i++)
19         {
20             int x=now.first+fa[i][0]; //pair 这里可以define
21             int y=now.second+fa[i][1];
22             if(ma[x][y]!=0||!x||!y||x==n+1||y==m+1||mp[x][y]==*)//这了的!x
23             continue;
24             ma[x][y]=ma[now.first][now.second]+1; //太**了,用标记顺便当step,充分利用
25             if(x==n&&y==m)
26             {
27                 printf("%d\n",ma[x][y]);
28                 return;
29             }
30             q.push({x,y});
31         }
32 
33     }
34     puts("-1"); //把不可能的结果放在这里,注意位置
35 }
36 int main()
37 {
38     int t;
39     scanf("%d",&t);
40     while(t--)
41     {
42         scanf("%d%d",&n,&m);
43         for(int i=1;i<=n;i++)
44         scanf("%s",mp[i]+1); //指针,不从第一个位置开始读
45         memset(ma,0,sizeof(ma));
46         bfs();
47     }
48     return 0;
49 }
学长写,虽然好像不兼容过不了,但是太厉害了!!
技术分享图片
 1 #pragma GCC diagnostic error "-std=c++11"
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4 //typedef pair<int,int>node; //pair!! first
 5 int fa[4][2]={{-1,0},{0,-1},{0,1},{1,0}};
 6 char mp[505][505];
 7 int ma[505][505],n,m;
 8 struct node{
 9 int x,y;
10 };
11 void bfs()
12 {
13     queue<node>q;
14     node now;
15     now.x=1;
16     now.y=1;
17     ma[1][1]=1;
18     while(!q.empty()) q.pop(); //clear
19     q.push(now);
20     while(!q.empty())
21     {
22         now=q.front();
23         q.pop();
24         for(int i=0;i<4;i++)
25         {
26             int x=now.x+fa[i][0];
27             int y=now.y+fa[i][1];
28             if(ma[x][y]!=0||!x||!y||x==n+1||y==m+1||mp[x][y]==*)//这了的!x
29             continue;
30             ma[x][y]=ma[now.x][now.y]+1; //太**了,用标记顺便当step,充分利用
31             if(x==n&&y==m)
32             {
33                 printf("%d\n",ma[x][y]-1);
34                 return;
35             }
36             node no;
37             no.x=x;
38             no.y=y;
39             q.push(no);
40         }
41 
42     }
43     puts("-1"); //把不可能的结果放在这里,注意位置
44 }
45 int main()
46 {
47     int t;
48     scanf("%d",&t);
49     while(t--)
50     {
51         scanf("%d%d",&n,&m);
52         for(int i=1;i<=n;i++)
53         scanf("%s",mp[i]+1); //指针,不从第一个位置开始读
54         memset(ma,0,sizeof(ma));
55         bfs();
56     }
57     return 0;
58 }
pair不能用后 改成struct

 

XXrl找bug hhh

标签:dia   class   stream   empty   type   兼容   不能   开始   char   

原文地址:https://www.cnblogs.com/XXrll/p/10121580.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!