01迷宫

 

https://www.luogu.org/problemnew/show/P1141

 

这题全部输入后 把答案存起来 ,再把答案一次性输出

和边输入边输出    前者时间花的更少。 

 

用stack来打表吧,针对同一个n 同一个mp地图,把所有的点分别能到几个地方 都算一遍,(能到达一个相同地方的不同点 ,一定是可以互相联通的

 

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<string>
 7 #include<cmath>
 8 #include<set>
 9 #include<vector>
10 #include<stack>
11 #include<queue>
12 #include<map>
13 using namespace std;
14 #define ll long long
15 #define mem(a,x) memset(a,x,sizeof(a))
16 #define se second
17 #define fi first
18 const int INF= 0x3f3f3f3f;
19 const int N=1e5+5;
20 
21 int  n,m,cnt=0;
22 int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1},ans[1005][1005],g[N],h[N];
23 char mp[1005][1005];
24 bool vis[1005][1005];
25 
26 struct note
27 {
28     int x,y;
29 }a,b;
30 queue<note>q;
31 stack<note>p;
32 
33 void bfs(int nx,int ny)
34 {
35     while(!q.empty())
36         q.pop();
37     a.x=nx;
38     a.y=ny;
39     cnt=1;
40     vis[a.x][a.y]=1;
41     q.push(a);
42     p.push(a);
43     while(!q.empty())
44     {
45         a=q.front();
46         q.pop();
47         for(int i=0;i<4;i++)
48         {
49             b.x=a.x+dx[i];
50             b.y=a.y+dy[i];
51             if(b.x>n||b.x<1||b.y>n||b.y<1||vis[b.x][b.y]==1||mp[b.x][b.y]==mp[a.x][a.y])
52                 continue;
53 
54             p.push(b);
55             cnt++;
56             vis[b.x][b.y]=1;
57             q.push(b);
58         }
59     }
60     while(!p.empty())
61     {
62         a=p.top();
63         p.pop();
64         ans[a.x][a.y]=cnt;
65     }
66 }
67 
68 int main()
69 {
70     cin>>n>>m;
71     for(int i=1;i<=n;i++)
72         scanf("%s",mp[i]+1);
73     for(int i=1;i<=m;i++)
74         scanf("%d%d",&g[i],&h[i]);
75     for(int i=1; i<=n; i++)
76     {
77         for(int j=1; j<=n; j++)
78         {
79             if(!ans[i][j]) //打表
80             {
81                 bfs(i,j);
82             }
83         }
84     }
85     for(int i=1; i<=m; i++)
86         cout<<ans[g[i]][h[i]]<<endl;
87 }

 

posted @ 2018-07-18 17:09  木流牛马  阅读(131)  评论(0编辑  收藏  举报