FZU Problem 1491 机器人测试(BFS)
2013-08-10 15:06
274 查看
#include<iostream> #include<cstdio> #include<queue> #include<conio.h> #include<cstring> using namespace std; int map[1002][1002]; int vis[1002][1002]; int val[1000001]; int N,Num,Max; int dir[][2] = {-1,0,0,1,1,0,0,-1}; struct Point { int x,y; int flag; }; bool Check(int x,int y,int F) { if( x < 0 || x >= N || y < 0 || y >= N) return 1; if( F && vis[x][y] ) return 1; if(map[x][y] == -2 ) return 1; if( F && map[x][y] == -3 ) return 1; return 0; } void BFS(int x,int y,int F) { queue<Point> Que; Point P,Q; P.x = x; P.y = y; P.flag = F; Que.push(P); if(F){ val[Num] = map[x][y]; if(map[x][y] == -1) val[Num] += 1; vis[x][y] = Num; } while( !Que.empty()){ P = Que.front(); Que.pop(); for(int i=0; i<4; i++){ Q.x = P.x + dir[i][0]; Q.y = P.y + dir[i][1]; Q.flag = P.flag; if(P.flag){ if( !Check(Q.x,Q.y,1) )//不出界、未遍历过、不是-2、-3 { val[Num] += map[Q.x][Q.y];//该水池的值 if(map[Q.x][Q.y] == -1) val[Num] += 1;//经过则起点加一 vis[Q.x][Q.y] = Num;//标记第几个水池 Que.push(Q);//入队 } } else{ if( !Check(Q.x,Q.y,0) )//不是-2、墙时 { if( vis[Q.x][Q.y] && val[vis[Q.x][Q.y]] > Max ) Max = val[vis[Q.x][Q.y]]; map[Q.x][Q.y] = -2;//把走过的路变为墙 Que.push(Q); } } } } } int main() { int i,j; int start_x,start_y; while(~scanf("%d",&N)) { for(i=0; i<N; i++) for(j=0; j<N; j++){ scanf("%d",&map[i][j]); if(map[i][j] == -1){ start_x = i; start_y = j; } } Num = 0; memset(vis,0,sizeof(vis)); memset(val,0,sizeof(val)); for(i=0; i<N; i++) for(j=0; j<N; j++){ if( !vis[i][j] && map[i][j] != -2 && map[i][j] != -3 ){ Num++; BFS(i,j,1); } } Max = 0; BFS(start_x,start_y,0); cout<<Max<<endl; } return 0; }
View Code
相关文章推荐
- (BFS)FZU.Problem 2188 过河I
- FZU Problem 2150 Fire Game (BFS,java)
- UVa - 10047 The Monocycle 独轮车 多状态BFS 重庆一中高2018级竞赛班第十一次测试 2016.9.24 Problem 4
- fzu——Problem 2124 吃豆人(bfs)
- FZU Problem 1920 Left Mouse Button[dfs ||bfs,扫雷游戏]
- FZU Problem 2150 Fire Game (双起点BFS啊 )
- Problem_FZU 2150 Fire Game BFS 两点
- FZU 2196 Escape(两次BFS)
- FZU 2150 Fire Game(bfs)
- fzu Problem 2139 久违的月赛之二
- FZU Problem 1692 Key problem(循环矩阵)
- FZU Problem 2238 Daxia & Wzc's problem
- FZU Fire Game(两点BFS)
- FZU Problem 2238 Daxia & Wzc's problem(Lucas定理求组合数)
- 搜索练习3 /poj.org/problem 3984 迷宫问题/bfs 回溯找路经
- FZU 1205 小鼠迷宫问题 <BFS+DFS>
- 【CodeCraft比赛】Problem 3——INVESCAPE (迷宫BFS)
- MSN中英双语聊天机器人上线,邀请测试
- FZU 2180 骑士 (双向BFS)
- C++ 实战测试——电子老鼠闯迷宫(BFS)