POJ2329 Nearest number - 2 [BFS]
2012-03-24 11:46
239 查看
题意:
给定一个矩阵。定义好距离的表达式。
如果这个矩阵有0,则找出离它最近的非0数填充之,然后这个最近非零数不只一个,则不填充。
思路:
我不明白这题为啥归类到DP了。
很显然是广搜啊。
由距离的定义我们可以知道每次广搜都是上下左右地移动即可。
不难写,但是要注意就是如果调用stl里面的queue则超时。
给定一个矩阵。定义好距离的表达式。
如果这个矩阵有0,则找出离它最近的非0数填充之,然后这个最近非零数不只一个,则不填充。
思路:
我不明白这题为啥归类到DP了。
很显然是广搜啊。
由距离的定义我们可以知道每次广搜都是上下左右地移动即可。
不难写,但是要注意就是如果调用stl里面的queue则超时。
#include<iostream> #include<vector> #include<string> #include<queue> #include<cmath> #include<algorithm> #define llong long long #define Min(a,b) (a<b?a:b) #define Max(a,b) (a>b?a:b) #define Abs(a) ((a)>0?(a):-(a)) #define Mod(a,b) (((a)-1+(b))%(b)+1) using namespace std; int n,m,t; const int N=205; const int M=105; const int inf=2099999999; int a ; int res ; int mx[4]={0,0,-1,1}; int my[4]={-1,1,0,0}; int vis ; struct Node { int x,y; }; void bfs(int x,int y) { memset(vis,0,sizeof(vis)); Node que[N*N]; int head=0,tail=0; int flag=0,level=inf; //que.push(Node(x,y));//刚开始用queue超时,stl里面的队列原来这么慢。 que[tail].x=x;//改成自己写队列,刚开始写成que[tail++]=Node(x,y)的形式,每次都调用struct Node里面的自己写的构造函数。也超时了。 que[tail].y=y; tail++;; vis[y][x]=1; //while(!que.empty()&&flag!=-1) while(head<tail&&flag!=-1) { //Node now=que.front(); //que.pop(); Node now=que[head++]; int x=now.x; int y=now.y; if(level<=vis[y][x]) break; for(int i=0;i<4&&flag!=-1;i++) { int nx=x+mx[i]; int ny=y+my[i]; if(ny<=n&&ny>=1&&nx>=1&&nx<=n&&!vis[ny][nx]) { vis[ny][nx]=vis[y][x]+1; if(a[ny][nx]) { if(!flag) { flag=a[ny][nx]; level=vis[ny][nx];//记录找到的最近的点的广搜层次。 } else { flag=-1; break; } } else { //que.push(Node(nx,ny)); //que[tail++]=Node(nx,ny); que[tail].x=nx; que[tail].y=ny; tail++; } } } } if(flag>0) res[y][x]=flag; } int main() { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { scanf("%d",a[i]+j); } for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) { if(!a[i][j]) { bfs(j,i); } else res[i][j]=a[i][j]; } for(int i=1;i<=n;i++) { for(int j=1;j<n;j++) { printf("%d ",res[i][j]); } printf("%d\n",res[i] ); } return 0; }
相关文章推荐
- POJ-2329 Nearest number - 2(BFS)
- POJ-2329 Nearest number - 2(BFS)
- poj 2329 Nearest number - 2 bfs
- POJ-2329 Nearest number - 2
- poj 2329 Nearest number - 2 这道题广搜为什么就是wa啊!!求解
- poj 2329 Nearest number - 2
- POJ 2329 Nearest number - 2(搜索)
- POJ 2329 Nearest number - 2(搜索用动规写)
- POJ 2329 (暴力+搜索bfs)
- POJ 2329 Nearest number - 2 笔记
- POJ 2329 (暴力+搜索bfs)
- POJ 3984 迷宫问题【迷宫最短路径 bfs】
- poj 3278 简单搜索bfs
- poj 1729 Jack and Jill (比较有特色的bfs)
- poj-3026--Borg Maze(最小生成树(kruskal算法)+bfs(队列)
- Catch That Cow POJ - 3278 图论模型 BFS
- POJ 1465-Multiple(BFS-最小整倍数)
- POJ 迷宫问题(经典BFS问题)
- (BFS11.1.1)POJ 3126 Prime Path(计算从初始素数到目标素数的最短路径长度)
- poj 2251 Dungeon Master(BFS)