hdu1241 Oil Deposits(dfs&&bfs)
2016-09-23 10:12
351 查看
这又是一个练习bfs和dfs的非常好的题目,找油井的个数,8个方向只要有,就算同一个,问有多少个
下面是dfs的,没什么可说的
这个是bfs的,我写这个的时候MLE了好几次,按理来说是不应该的,只有100个点啊,后来发现我当时是先把点加到栈里,等它弹出了,再变成,但要是那样的话可能会导致点重复加进队列吧,所以要在没进队列之前就变成;
下面是dfs的,没什么可说的
#include <iostream> #include <string.h> using namespace std; char s[105][105]; int n,m; int xx[8][2]={{0,1},{0,-1},{1,0},{-1,0},{1,-1},{1,1},{-1,-1},{-1,1}}; void dfs(int x,int y) { // cout<<s[x][y]<<endl; s[x][y]='*'; for(int i=0;i<8;i++) { int nx=x+xx[i][0]; int ny=y+xx[i][1]; if(nx>=0&&nx<m&&ny>=0&&ny<n&&s[nx][ny]=='@') dfs(nx,ny); } } int main() { while(cin>>m>>n) { if(m==0&&n==0) break; int sum=0; memset(s,0,sizeof(s)); for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { cin>>s[i][j]; // cout<<s[i][j]<<endl; } } // cout<<100<<endl; //int k=0; for(int i=0;i<m;i++) { for(int j=0;j<n;j++) { if(s[i][j]=='@') { //cout<<s[i][j]<<endl; //cout<<k++<<endl; dfs(i,j); sum++; } } } cout<<sum<<endl; } return 0; }
这个是bfs的,我写这个的时候MLE了好几次,按理来说是不应该的,只有100个点啊,后来发现我当时是先把点加到栈里,等它弹出了,再变成,但要是那样的话可能会导致点重复加进队列吧,所以要在没进队列之前就变成;
#include <iostream> #include <queue> #include <string.h> #pragma comment(linker, £¢/STACK:102400000,102400000£¢) using namespace std; int xx[8][2]= {{0,1},{0,-1},{1,0},{-1,0},{1,1},{1,-1},{-1,1},{-1,-1}}; struct sa { int x,y; } t,a,p; queue<sa>q; int n,m; char s[105][105]; void bfs(int x,int y) { t.x=x; t.y=y; q.push(t); while(!q.empty()) { sa a=q.front(); q.pop(); //s[a.x][a.y]='*'; for(int i=0; i<8; i++) { int nx=a.x+xx[i][0]; int ny=a.y+xx[i][1]; if(nx>=0&&nx<m&&ny>=0&&ny<n&&s[nx][ny]=='@') { p.x=nx; p.y=ny; s[p.x][p.y]='*'; q.push(p); // cout<<p.x<<" "<<p.y<<endl; } } } } int main() { while(cin>>m>>n) { if(m==0&&n==0) break; int sum=0; memset(s,0,sizeof(s)); while(!q.empty()) q.pop(); for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { cin>>s[i][j]; } } for(int i=0; i<m; i++) { for(int j=0; j<n; j++) { if(s[i][j]=='@') { s[i][j]='*'; bfs(i,j); sum++; } } } cout<<sum<<endl; } return 0; }
相关文章推荐
- 【DFS&BFS】HDU1241-Oil Deposits
- HDU 1241/UVa572 Oil Deposits(DFS&BFS)
- 【HDU】-1241-Oil Deposits(DFS || BFS&&队列)
- HDU-#1241 Oil Deposits(BFS & DFS)
- Oil Deposits ——DFS&&BFS
- 【hdu1241】Oil Deposits——dfs/bfs
- HDU1241 Oil Deposits 解题报告--dfs
- HDU1241_Oil Deposits(BFS)+(DFS)
- UVA - 572 Oil Deposits(DFS和BFS两种解法)
- HDU 1241 Oil Deposits (DFS/BFS)
- HDOJ 1241 Oil Deposits——邻接矩阵BFS和DFS
- Oil Deposits(dfs/bfs)
- 【HDU 1241 Oil Deposits】 + DFS || BFS
- HDU1241 Oil Deposits(DFS)
- ACM-DFS之Oil Deposits——hdu1241
- HDU1241 Oil Deposits(深搜DFS)
- 杭电1241--Oil Deposits(BFS)
- HDU1241:Oil Deposits(DFS)
- HDU 1241 Oil Deposits (DFS/BFS)
- DFS---Lake Counting&& Oil Deposits&&迷宫问题