首页 > 代码库 > 喵哈哈村的魔法考试 Round #7 (Div.2) B
喵哈哈村的魔法考试 Round #7 (Div.2) B
B | 喵哈哈村的麦克雷 |
---|
喵哈哈村的麦克雷
发布时间: 2017年3月13日 11:51 最后更新: 2017年3月14日 18:16 时间限制: 1000ms 内存限制: 128M
为了拯救喵哈哈村,这个世界必须要存在英雄。
一名叫做麦克雷的英雄站了出来!他现在面临一个难题:
给定一个N x M的01矩阵,其中1表示陆地,0表示水域。对于每一个位置,求出它距离最近的水域的距离是多少。
矩阵中每个位置与它上下左右相邻的格子距离为1。
本题包含若干组测试数据:
第一行包含两个整数,N和M。
以下N行每行M个0或者1,代表地图。
数据保证至少有1块水域。
满足,1 <= N, M <= 100
输出N行,每行M个空格分隔的整数。每个整数表示该位置距离最近的水域的距离。
每行的末尾都请加一个空格……
复制
4 4 0110 1111 1111 0110
0 1 1 0 1 2 2 1 1 2 2 1 0 1 1 0
Hint: bfs
一开始看到这个题目,就想到bfs搜距离嘛...然后就从第一个开始去搜 搜 搜...搜到最后一个点,样例是通过了 然后发现tle了...
看到题解之后。。。噢原来可以这样做啊...(把0放进队列,然后从0开始搜嘛,每次从同一层次级别开始搜) bfs的特点是层序遍历,所以它搜到的就是最短路(可以稍微想一想)
1 #include<iostream> 2 #include<queue> 3 #include<cstdio> 4 #include<cstring> 5 using namespace std; 6 typedef pair<int, int> p; 7 char g[1000][1000]; 8 int sign[1000][1000]; 9 int dx[]={1, 0, -1, 0}, dy[]={0, 1, 0, -1};10 int n, m;11 inline bool ok(int x, int y){12 if(x>=0&&x<n&&y>=0&&y<m) return true;13 return false;14 }15 /*16 inline void bfs(int x, int y){17 18 que.push(make_pair(x, y));19 while(que.size()){20 p now=que.front(); que.pop();21 for(int i=0; i<4; i++){22 int nx=now.first+dx[i], ny=now.second+dy[i];23 if(ok(nx, ny)) {24 que.push(make_pair(nx, ny));25 step[nx][ny]=step[now.first][now.second]+1;26 if(g[nx][ny]==‘0‘){27 sign[x][y]=step[nx][ny];28 sign[now.first][now.second]=1;29 return;30 } 31 } 32 }33 }34 }35 */36 int main(){37 while(cin>>n>>m){38 for(int i=0; i<n; i++){39 scanf("%s", &g[i]);40 }41 memset(sign, -1, sizeof(sign));42 queue<pair<int, int> >que;43 for(int i=0; i<n; i++){44 for(int j=0; j<m; j++){45 if(g[i][j]==‘0‘){46 sign[i][j]=0;47 que.push(make_pair(i, j));48 }49 }50 }51 while(que.size()){52 p now=que.front(); que.pop();53 for(int i=0; i<4; i++){54 int nx=now.first+dx[i], ny=now.second+dy[i];55 if(!ok(nx, ny)) continue;56 if(sign[nx][ny]!=-1) continue;57 sign[nx][ny]=sign[now.first][now.second]+1;58 que.push(make_pair(nx, ny));59 }60 }61 for(int i=0; i<n; i++){62 for(int j=0; j<m; j++){63 printf("%d ", sign[i][j]);64 }65 printf("\n");66 }67 }68 69 return 0;70 }
喵哈哈村的魔法考试 Round #7 (Div.2) B
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。