码迷,mamicode.com
首页 > 其他好文 > 详细

bfs

时间:2016-04-14 06:50:46      阅读:353      评论:0      收藏:0      [点我收藏+]

标签:

uva,572

简单dfs题目。

技术分享
 1 #include <iostream>
 2 #include <cstring>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 
 6 using namespace std;
 7 const int maxn=105;
 8 
 9 char map[maxn][maxn];
10 int vis[maxn][maxn];
11 int n,m;
12 int dx[]={-1,0,-1,-1,0,1,1,1},dy[]={-1,-1,0,1,1,-1,0,1};
13 
14 bool check(int x,int y)
15 {
16     if(x<0 || x>=m || y<0 || y>=n) return false;
17     if(vis[x][y]) return false;
18     if(map[x][y]!=@) return false;
19     return true;
20 }
21 
22 void dfs(int x,int y)
23 {
24     int xx,yy;
25     vis[x][y]=1;
26     map[x][y]=#;
27     for(int i=0;i<8;i++)
28     {
29         xx=x+dx[i];
30         yy=y+dy[i];
31         if(check(xx,yy))
32         {
33             dfs(xx,yy);
34         }
35     }
36     
37 }
38 
39 
40 int main()
41 {
42     while(scanf("%d %d",&m,&n) && n+m)
43     {
44         memset(map,0,sizeof(map));
45         for(int i=0;i<m;i++)
46             scanf("%s",map[i]);
47         
48         memset(vis,0,sizeof(vis));
49         int cnt=0;
50         for(int i=0;i<m;i++)
51             for(int j=0;j<n;j++)
52             {
53                 if(!vis[i][j] && map[i][j]==@)
54                 {
55                     dfs(i,j);
56                     cnt++;
57                 }
58             }
59         printf("%d\n",cnt);
60     }
61     return 0;
62 }
View Code

uva,439

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <cstring>
 4 
 5 using namespace std;
 6 
 7 struct Node
 8 {
 9     int x,y;
10     int bu;
11 }q[11111];
12 
13 int dx[]={1,1,-1,-1,2,2,-2,-2},dy[]={2,-2,2,-2,1,-1,1,-1};
14 int vis[15][15];
15 int x,y,xx,yy;
16 char a[3],b[3];
17 int cnt;
18 
19 
20 bool check(int x,int y)
21 {
22     if(x<1 || x>8 || y<1 || y>8) return false;
23     if(vis[x][y]) return false;
24     return true;
25 }
26 
27 void bfs(int x,int y)
28 {
29     int head=0,tail=0;
30     q[head].x=x;
31     q[head++].y=y;
32     vis[x][y]=1;
33     for(int i=0;i<11111;i++)
34         q[i].bu=9999;
35     q[tail].bu=0;
36     while(tail!=head)
37     {
38         Node t=q[tail++];
39         Node tt;
40         for(int i=0;i<8;i++)
41         {
42             tt.x=t.x+dx[i];
43             tt.y=t.y+dy[i];
44             if(tt.x==xx && tt.y==yy)
45             {
46                 cnt=t.bu+1;
47                 return;
48             }
49             if(check(tt.x,tt.y))
50             {
51                 vis[tt.x][tt.y]=1;
52                 tt.bu=t.bu+1;  //应该是求深度。。我一开始直接弄一个cnt++
53 //弄成求附近有多少步了。。wa了两次
54                 q[head++]=tt;
55             }
56         }
57     }
58 }
59 
60 int main()
61 {
62     while(~scanf("%s%s",a, b))
63     {
64         x=a[0]-a+1;
65         y=a[1]-0;
66         xx=b[0]-a+1;
67         yy=b[1]-0;
68         cnt=0;
69         if(x==xx && y==yy)
70             printf("To get from %s to %s takes 0 knight moves.\n",a,b);
71         else
72         {
73             memset(q,0,sizeof(q));
74             memset(vis,0,sizeof(vis));
75             bfs(x,y);
76             printf("To get from %s to %s takes %d knight moves.\n",a,b,cnt);
77         }
78     }
79     return 0;
80 }
View Code

uva,417

技术分享
 1 #include <iostream>
 2 #include <cstdlib>
 3 #include <cstring>
 4 #include <map>
 5 #include <cstdio>
 6 
 7 using namespace std;
 8 
 9 int used[26];
10 char save[6],data[6];
11 char answ[83685][6];
12 int Count=0;
13 map<string,int> mp;
14 
15 void dfs(int s,int n,int t)
16 {
17     if(n==t)
18     {
19         for(int i=0;i<t;i++)
20             answ[Count][i]=save[i];
21         answ[Count++][t]=0;
22     }
23     else
24     {
25         for(int i=s;i<26;i++)
26         {
27             if(!used[i])
28             {
29                 used[i]=1;
30                 save[n]=i+a;
31                 dfs(i+1,n+1,t);
32                 used[i]=0;
33             }
34         }
35     }
36 }
37 
38 int main()
39 {
40     Count=1;
41     for(int i=1;i<6;i++)
42         dfs(0,0,i);
43     for(int i=1;i<Count;++i)
44     {
45         string s=answ[i];
46         mp[s]=i;
47     }
48     while(cin>>data)
49     {
50         cout<<mp[data]<<endl;
51     }
52     return 0;
53 }
View Code

 

bfs

标签:

原文地址:http://www.cnblogs.com/do-it-best/p/5389585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!