求改

P1141 01迷宫

@[妖孽皇](/space/show?uid=122716) 你想一下,对于一个点(i,j)和他所能到达的点 ,把这些点看成一个联通图,他们所能到达的格子的数目是不是一样的?
by 基地A_I @ 2019-03-15 18:22:11


### 联通图 改成 联通块
by 基地A_I @ 2019-03-15 18:22:56


@[基地A_I](/space/show?uid=147511) 是啊,可是我已经这样了
by 妖孽皇 @ 2019-03-15 18:23:14


???我没认真看诶,等我认真看一下你的代码^_^
by 基地A_I @ 2019-03-15 18:25:10


@[基地A_I](/space/show?uid=147511) 可以dfs搜到的点的坐标存在a和b里,搜出来了再存ans里,标上序号,过一会如果又有了就直接输出
by 妖孽皇 @ 2019-03-15 18:25:27


那~~,我贴一下我的代码,介意吗?
by 基地A_I @ 2019-03-15 18:26:59


@[基地A_I](/space/show?uid=147511) 没关系啊
by 妖孽皇 @ 2019-03-15 18:27:56


@[妖孽皇](/space/show?uid=122716) 诶,你这样 ~~好像没有什么用~~
by 基地A_I @ 2019-03-15 18:28:08


@[基地A_I](/space/show?uid=147511) e。。。事实上我并不会写
by 妖孽皇 @ 2019-03-15 18:28:50


# _我的代码(~~没打注释别介意~~)_ ```cpp #include<bits/stdc++.h> #define Good return #define Lucky 0 using namespace std; struct node { int x,y; }color[10000007]; int cnt; const int dx[4] = {0,0,1,-1}; const int dy[4] = {1,-1,0,0}; int n,m,sum; char mp[1007][1007]; int flag[1007][1007]; int ans[1000007]; void Dfs(int x,int y,int num) { for(int i=0;i<4;++i) { int nx = x+dx[i]; int ny = y+dy[i]; if(nx>=1 && nx<=n && ny>=1 && ny<=n) if(!flag[nx][ny] && mp[nx][ny]!=mp[x][y]) { sum++; flag[nx][ny] = num; Dfs(nx,ny,cnt); } } } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) cin>>mp[i][j]; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { if(!flag[i][j]) { ++cnt; sum = 1; flag[i][j] = cnt; Dfs(i,j,cnt);//染色 ans[cnt] = sum; } } for(int i=1;i<=m;++i) { int x,y; scanf("%d%d",&x,&y); printf("%d\n",ans[flag[x][y]]); } Good Lucky; } ```
by 基地A_I @ 2019-03-15 18:30:01


上一页 | 下一页