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

简单搜索小题狂练

时间:2018-04-01 01:03:15      阅读:217      评论:0      收藏:0      [点我收藏+]

标签:span   splay   main   pre   bre   view   pos   log   one   

kuangbin带你飞 专题一

http://poj.org/problem?id=1321

深搜一遍

技术分享图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 char mp[10][10],flag[10];
 4 int n,m,ans;
 5 
 6 void dfs(int x,int an9)
 7 {
 8     if(an9==m){
 9         ans++;
10         return ;
11     }
12     for(int i=x;i<n;i++){
13         for(int j=0;j<n;j++){
14             if(mp[i][j]==#&&flag[j]==0){
15                 flag[j]=1;
16                 dfs(i+1,an9+1);
17                 flag[j]=0;
18             }
19         }
20     }
21 }
22 int main()
23 {
24     //freopen( "in.txt", "r", stdin);
25     while( ~scanf("%d%d",&n,&m)){
26         if(n==-1&&m==-1) break;
27         for(int i=0;i<n;i++)
28             scanf("%s",mp[i]);
29         ans=0;
30         memset( flag, 0, sizeof flag);
31         for(int i=0;i<n;i++){
32             for(int j=0;j<n;j++){
33                 if(mp[i][j]==#){
34                     flag[j]=1;
35                     dfs(i+1,1);
36                     flag[j]=0;
37                 }
38             }
39         }
40         printf("%d\n",ans);
41     }
42     return 0;
43 }
View Code

http://poj.org/problem?id=2251

广搜一遍(代码后面再改改)

技术分享图片
  1 #include<stdio.h>
  2 #include<string.h>
  3 #include<queue>
  4 #include<algorithm>
  5 using namespace std;
  6 #define Max 36
  7 char mp[Max][Max][Max];
  8 int L,R,C,ans,ex,ey,ez;
  9 int moz[]={0,0,0,0,1,-1};
 10 int moy[]={0,0,1,-1,0,0};
 11 int mox[]={1,-1,0,0,0,0};
 12 int flag[Max][Max][Max];
 13 
 14 bool cheat(int x, int y, int z)
 15 {
 16     if(x>0&&y>0&&z>0&&x<=L&&y<=R&&z<=C&&flag[x][y][z]==0&&(mp[x][y][z]==.||mp[x][y][z]==E)){
 17         return true;
 18     }
 19     return false;
 20 }
 21 typedef struct P{int x,y,z;};
 22 void bfs(int opx,int opy,int opz,int anp)
 23 {
 24     queue<P> op;
 25     P p,q;
 26     p.x=opx,p.y=opy,p.z=opz;
 27     flag[opx][opy][opz]=1;
 28     op.push(p);
 29     while(!op.empty()){
 30         int tim=op.size();
 31         p=op.front();
 32         op.pop();
 33         if(mp[p.x][p.y][p.z]==E){
 34             ans=anp;
 35             break;
 36         }
 37         for(int i=0;i<6;i++){
 38             int x,y,z;
 39             x=p.x+mox[i];
 40             y=p.y+moy[i];
 41             z=p.z+moz[i];
 42             if(cheat(x,y,z)){
 43                 flag[x][y][z]=1;
 44                 q.x=x;
 45                 q.y=y;
 46                 q.z=z;
 47                 op.push(q);
 48             }
 49         }
 50         while(--tim){
 51             p=op.front();
 52             op.pop();
 53             if(mp[p.x][p.y][p.z]==E){
 54                 ans=anp;
 55                 break;
 56             }
 57             for(int i=0;i<6;i++){
 58                 int x,y,z;
 59                 x=p.x+mox[i];
 60                 y=p.y+moy[i];
 61                 z=p.z+moz[i];
 62                 if(cheat(x,y,z)){
 63                     flag[x][y][z]=1;
 64                     q.x=x;
 65                     q.y=y;
 66                     q.z=z;
 67                     op.push(q);
 68                 }
 69             }
 70         }
 71         anp++;
 72     }
 73 }
 74 
 75 int main()
 76 {
 77 //    freopen( "in.txt", "r", stdin);
 78     while( ~scanf("%d%d%d",&L,&R,&C)){
 79         if(L==0&&R==0&&C==0) break;
 80         int bx,by,bz;
 81         memset( flag, 0, sizeof flag);
 82         for(int i=1;i<=L;i++){
 83             getchar();
 84             for(int j=1;j<=R;j++){
 85                 for(int k=1;k<=C;k++){
 86                     scanf("%c",&mp[i][j][k]);
 87                     if(mp[i][j][k]==S){
 88                         bx=i,by=j,bz=k;
 89                     }
 90                     if(mp[i][j][k]==E){
 91                         ex=i,ey=j,ez=k;
 92                     }
 93                 }
 94                 getchar();
 95             }
 96         }
 97 //        printf("%d %d %d\n",ex,ey,ez);
 98         ans=1e7;
 99         bfs(bx,by,bz,0);
100         if(ans!=1e7){
101             printf("Escaped in %d minute(s).\n",ans);
102         }
103         else{
104             printf("Trapped!\n");
105         }
106     }
107     return 0;
108 }
View Code

 http://poj.org/problem?id=3278

广搜

技术分享图片
 1 #include<stdio.h>
 2 #include<math.h>
 3 #include<string.h>
 4 #include<stdlib.h>
 5 #include<queue>
 6 using namespace std;
 7 #define Max 100006
 8 using namespace std;
 9 int n,en,ans;
10 int flag[Max];
11 
12 void bfs(int op)
13 {
14     queue<int> q;
15     q.push(op);
16     flag[op]=1;
17     int fi=0;
18     while(!q.empty()){
19         int iop,num;
20         num=q.size();
21         while(num--){
22             iop=q.front();
23             q.pop();
24             int x,y,z;
25             x=iop+1;
26             y=iop*2;
27             z=iop-1;
28             if(x==en||y==en||z==en){
29                 fi=1;
30                 break;
31             }
32             if(!flag[x]){
33                 q.push(x);
34                 flag[x]=1;
35             }
36             if(y<Max&&!flag[y]){
37                 q.push(y);
38                 flag[y]=1;
39             }
40             if(z>0&&!flag[z]){
41                 q.push(z);
42                 flag[z]=1;
43             }
44         }
45         ans++;
46         if(fi==1)
47             break;
48     }
49 }
50 
51 int main()
52 {
53     while( ~scanf("%d%d",&n,&en)){
54         memset( flag, 0, sizeof flag);
55         if(n>=en){
56             printf("%d\n",n-en);
57             continue;
58         }
59         ans=0;
60         bfs(n);
61         printf("%d\n",ans);
62     }
63     return 0;
64 }
View Code

 

简单搜索小题狂练

标签:span   splay   main   pre   bre   view   pos   log   one   

原文地址:https://www.cnblogs.com/ZQUACM-875180305/p/8682418.html

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