wenbao与bfs

Posted wenbao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了wenbao与bfs相关的知识,希望对你有一定的参考价值。

学长代码(杭电2645)

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 
 4 int n,m;
 5 char s[200][200];
 6 int ma[200][200],ans[200][200];
 7 bool vis[200][200];
 8 int dir[4][2]={-1,0,0,-1,1,0,0,1};
 9 struct Node
10 {
11 int x,y;
12 int step;
13 };
14 
15 int bfs(int x,int y)
16 {
17 memset(vis,0,sizeof(vis));
18 Node a,b,c;
19 a.x=x,a.y=y,a.step=0;
20 queue<Node>q;
21 q.push(a);
22 while(!q.empty())
23 {
24 b=q.front();
25 q.pop();
26 vis[b.x][b.y]=1;
27 if(ma[b.x][b.y]==1)return b.step;
28 for(int i=0;i<4;i++)
29 {
30 c=b;
31 c.x+=dir[i][0];
32 c.y+=dir[i][1];
33 c.step++;
34 if(c.x<0||c.x>=n||c.y<0||c.y>=m||vis[c.x][c.y])continue;
35 q.push(c);
36 }
37 }
38 return -1;
39 }
40 
41 int main()
42 {
43 while(~scanf("%d%d",&n,&m))
44 {
45 for(int i=0;i<n;i++)
46 scanf("%s",s[i]);
47 for(int i=0;i<n;i++)
48 for(int k=0;s[i][k]!=\0;k++)
49 ma[i][k]=s[i][k]-0;
50 for(int i=0;i<n;i++)
51 for(int k=0;k<m;k++)
52 ans[i][k]=bfs(i,k);
53 for(int i=0;i<n;i++)
54 {
55 for(int k=0;k<m-1;k++)
56 printf("%d ",ans[i][k]);
57 printf("%d\n",ans[i][m-1]);
58 }
59 }
60 return 0;
61 }

wenbao(杭电2645)

 1 #include <stdio.h>
 2 #include <queue>
 3 #include <string.h>
 4 using namespace std;
 5 int n,m;
 6 char s[200][200];
 7 int a[200][200];
 8 int b[200][200];
 9 int dir[4][2]= {1,0,0,1,-1,0,0,-1};
10 bool flag[200][200];
11 struct t
12 {
13 int xx,yy;
14 int num;
15 };
16 int bfs(int x,int y)
17 {
18 queue <t> p;
19 t d,b,c;
20 d.xx=x,d.yy=y,d.num=0;
21 p.push(d);
22 while(!p.empty())
23 {
24 b=p.front();
25 p.pop();
26 flag[b.xx][b.yy]=1;
27 if(a[b.xx][b.yy]==1) return b.num;
28 for(int i=0; i<4; i++)
29 {
30 c=b;
31 c.xx+=dir[i][0],c.yy+=dir[i][1];
32 if(c.xx<0||c.xx>=n||c.yy<0||c.yy>=m||flag[c.xx][c.yy])
33 continue;
34 c.num++;
35 p.push(c);
36 }
37 }
38 return -1;
39 }
40 int main()
41 {
42 while(~scanf("%d%d",&n,&m))
43 {
44 getchar();
45 for(int i=0; i<n; i++)
46 {
47 gets(s[i]);
48 for(int j=0; j<m; j++)
49 a[i][j]=s[i][j]-0;
50 }
51 for(int i=0; i<n; i++)
52 for(int j=0; j<m; j++)
53 {
54 memset(flag,0,sizeof(flag));
55 b[i][j]=bfs(i,j);
56 }
57 for(int i=0; i<n; i++)
58 {
59 for(int j=0; j<m-1; j++)
60 {
61 printf("%d ",b[i][j]);
62 }
63 printf("%d\n",b[i][m-1]);
64 }
65 }
66 return 0;
67 }

 

 

http://acm.nyist.net/JudgeOnline/problem.php?pid=92

不想说话!!!!!!!!!!!!

论dfs与bfs的速度、、、

 

 

 1 #include <iostream>
 2 #include <queue>
 3 #include <string.h>
 4 #include <stdio.h>
 5 using namespace std;
 6 typedef pair<int, int> P;
 7 int a[1000][1500];
 8 int w, t, h;
 9 int dir[4][2] = { 0, 1, 1, 0, 0, -1, -1, 0};
10 void dfs(){
11     pair<int, int> p1, p2;
12     p1.first = 0;
13     p1.second = 0;
14     queue<P> q;
15     q.push(p1);
16     while(!q.empty()){
17         p1 = q.front();
18         q.pop();
19         for(int i = 0; i < 4; i++){
20             p2.first = p1.first + dir[i][0];
21             p2.second  = p1.second + dir[i][1];
22             if(p2.first >= 0 && p2.first <= h+1 && p2.second >= 0 && p2.second <= w+1 && a[p2.first][p2.second] != 0){
23                 a[p2.first][p2.second] = 0;
24                 q.push(p2);
25             }
26         }
27     }
28 }
29 // void dfs(int x, int y){
30     // for(int i = 0; i < 4; i++){
31         // int xx = x + dir[i][0];
32         // int yy = y + dir[i][1];
33         // if(xx >= 0 && xx <= h+1 && yy >= 0 && yy <= w+1 && a[xx][yy] != 0){
34             // a[xx][yy] = 0;
35             // dfs(xx, yy);
36         // }
37     // }
38 // }
39 int main(){
40     scanf("%d", &t);
41     while(t--){
42         scanf("%d %d", &w, &h);
43         for(int i = 0; i <= w+1; i++){
44             a[0][i] = 1;
45             a[h+1][i] = 1;
46         }
47         for(int i = 0; i <= h+1; i++){
48             a[i][0] = 1;
49             a[i][w+1] = 1; 
50         }
51         for(int i = 1; i <= h; i++){
52             for(int j = 1; j <= w; j++){
53                 scanf("%d", &a[i][j]);
54             }
55         }
56          dfs();
57         for(int i = 1; i <= h; i++){
58             for(int j = 1; j <= w; j++){
59                 if(j != w)
60                     printf("%d ", a[i][j]);
61                 else
62                     printf("%d\n", a[i][j]);
63             }
64         }
65     }
66     return 0;
67 }
68         

 

 

 

只有不断学习才能进步!

 

以上是关于wenbao与bfs的主要内容,如果未能解决你的问题,请参考以下文章

wenbao与三分

wenbao与差分约束

wenbao与manacher

wenbao与最小生成树

wenbao与二分图

wenbao与概率