搜索练习

洛谷p1219(N皇后)

 1 #include <bits/stdc++.h>
 2 #define fi first
 3 #define se second
 4 #define pb push_back
 5 #define fio ios::sync_with_stdio(false);cin.tie(0);
 6 #define pii pair<int,int>
 7 #define vi vector<int>
 8 #define vc vector<char>
 9 #define vs vector<string>
10 #define mii map<int,int>
11 #define si(a) scanf("%d",&a)
12 #define sl(a) scanf("%I64d",&a)
13 #define slf(a) scanf("%lf",&a)
14 #define ss(a) scanf("%s",&a)
15 #define pi acos(-1)
16 
17 const int INF=0x3f3f3f3f;
18 const int N=2e5+5;
19 
20 typedef long long ll;
21 typedef double db;
22 typedef unsigned long long ull;
23 using namespace std;
24 int vis[N];
25 int vis1[N];
26 int vis2[N];
27 int n;
28 int cnt;
29 int ans[N];
30 bool flag=true;
31 void dfs(int i)
32 {
33     if(i>n)
34     {
35         cnt++;
36         if(cnt<=3)
37         {
38             for (int i=1;i<n;i++)
39             {
40                 cout<<ans[i]<<" ";
41             }
42             cout<<ans[n]<<endl;
43         }
44         return;
45     }
46     else
47     {
48         for (int j=1;j<=n;j++)
49         {
50             if(!vis[j]&&!vis1[i+j]&&!vis2[i-j+n])
51             {
52                 ans[i]=j;
53                 vis[j]=1;
54                 vis1[i+j]=1;
55                 vis2[i-j+n]=1;
56                 dfs(i+1);
57                 vis[j]=0;
58                 vis1[i+j]=0;
59                 vis2[i-j+n]=0;
60             }
61         }
62     }
63 
64 }
65 int main()
66 {
67     fio;
68     cin>>n;
69     cnt=0;
70     dfs(1);
71     cout<<cnt<<endl;
72 }

poj1321

 poj1321这题主要是dfs(i)到底之后还要一个dfs(i+1),这点没注意到,坑了几次

 1 #include <bits/stdc++.h>
 2 #define fi first
 3 #define se second
 4 #define pb push_back
 5 #define fio ios::sync_with_stdio(false);cin.tie(0);
 6 #define pii pair<int,int>
 7 #define vi vector<int>
 8 #define vc vector<char>
 9 #define vs vector<string>
10 #define mii map<int,int>
11 #define si(a) scanf("%d",&a)
12 #define sl(a) scanf("%I64d",&a)
13 #define slf(a) scanf("%lf",&a)
14 #define ss(a) scanf("%s",&a)
15 #define Clear(a,b) memset(a,b,sizeof(a))
16 #define pi acos(-1)
17 
18 const int INF=0x3f3f3f3f;
19 const int N=2e5+5;
20 
21 typedef long long ll;
22 typedef double db;
23 typedef unsigned long long ull;
24 using namespace std;
25 int n,k,ans;
26 int cnt=0;
27 char g[1005][1005];
28 int vis[N];
29 
30 void dfs(int i)
31 {
32     if(cnt==k) {ans++;return;}
33     if(i==n) {return;}
34         for (int j=0;j<n;j++)
35         {
36             if(!vis[j]&&g[i][j]=='#')
37             {
38                 cnt++;
39                 vis[j]=1;
40                 dfs(i+1);
41                 cnt--;
42                 vis[j]=0;
43             }
44         }
45     dfs(i+1);
46 }
47 
48 int main()
49 {
50     fio;
51     while(cin>>n>>k)
52     {
53         if(n==-1&&k==-1) break;
54         Clear(vis,0);
55         Clear(g,0);
56         ans=0;
57         cnt=0;
58         for (int i=0;i<n;i++)
59             gets(g[i]);
60         dfs(0);
61         cout<<ans<<endl;
62     }
63 
64 }

 洛谷p1101

  1 #include <bits/stdc++.h>
  2 #define fi first
  3 #define se second
  4 #define pb push_back
  5 #define fio ios::sync_with_stdio(false);cin.tie(0);
  6 #define pii pair<int,int>
  7 #define vi vector<int>
  8 #define vc vector<char>
  9 #define vs vector<string>
 10 #define mii map<int,int>
 11 #define si(a) scanf("%d",&a)
 12 #define sl(a) scanf("%I64d",&a)
 13 #define slf(a) scanf("%lf",&a)
 14 #define ss(a) scanf("%s",&a)
 15 #define Clear(a,b) memset(a,b,sizeof(a))
 16 #define pi acos(-1)
 17 
 18 const int INF=0x3f3f3f3f;
 19 const int N=2e5+5;
 20 
 21 typedef long long ll;
 22 typedef double db;
 23 typedef unsigned long long ull;
 24 using namespace std;
 25 
 26 int cnt;
 27 char vis[101][101];
 28 bool mark[101][101];
 29 int n;
 30 
 31 void dfs(int x,int y)
 32 {
 33     if(x>=0&&y>=0&&x+6<n&&y<n)
 34     {
 35         if(vis[x+1][y]=='i'&&vis[x+2][y]=='z'&&vis[x+3][y]=='h'&&vis[x+4][y]=='o'&&vis[x+5][y]=='n'&&vis[x+6][y]=='g')
 36         {
 37             for (int i=0;i<=6;i++)
 38                 mark[x+i][y]=true;
 39         }
 40     }
 41     if(x-6>=0&&y>=0&&x<n&&y<n)
 42     {
 43         if(vis[x-1][y]=='i'&&vis[x-2][y]=='z'&&vis[x-3][y]=='h'&&vis[x-4][y]=='o'&&vis[x-5][y]=='n'&&vis[x-6][y]=='g')
 44         {
 45             for (int i=0;i<=6;i++)
 46                 mark[x-i][y]=true;
 47         }
 48     }
 49     if(x>=0&&y>=0&&x<n&&y+6<n)
 50     {
 51         if(vis[x][y+1]=='i'&&vis[x][y+2]=='z'&&vis[x][y+3]=='h'&&vis[x][y+4]=='o'&&vis[x][y+5]=='n'&&vis[x][y+6]=='g')
 52         {
 53             for (int i=0;i<=6;i++)
 54                 mark[x][y+i]=true;
 55         }
 56     }
 57     if(x>=0&&y-6>=0&&x<n&&y<n)
 58     {
 59         if(vis[x][y-1]=='i'&&vis[x][y-2]=='z'&&vis[x][y-3]=='h'&&vis[x][y-4]=='o'&&vis[x][y-5]=='n'&&vis[x][y-6]=='g')
 60         {
 61             for (int i=0;i<=6;i++)
 62                 mark[x][y-i]=true;
 63         }
 64     }
 65     if(x-6>=0&&y-6>=0&&x<n&&y<n)
 66     {
 67         if(vis[x-1][y-1]=='i'&&vis[x-2][y-2]=='z'&&vis[x-3][y-3]=='h'&&vis[x-4][y-4]=='o'&&vis[x-5][y-5]=='n'&&vis[x-6][y-6]=='g')
 68         {
 69             for (int i=0;i<=6;i++)
 70                 mark[x-i][y-i]=true;
 71         }
 72     }
 73     if(x>=0&&y>=0&&x+6<n&&y+6<n)
 74     {
 75         if(vis[x+1][y+1]=='i'&&vis[x+2][y+2]=='z'&&vis[x+3][y+3]=='h'&&vis[x+4][y+4]=='o'&&vis[x+5][y+5]=='n'&&vis[x+6][y+6]=='g')
 76         {
 77             for (int i=0;i<=6;i++)
 78                 mark[x+i][y+i]=true;
 79         }
 80     }
 81     if(x-6>=0&&y>=0&&x<n&&y+6<n)
 82     {
 83         if(vis[x-1][y+1]=='i'&&vis[x-2][y+2]=='z'&&vis[x-3][y+3]=='h'&&vis[x-4][y+4]=='o'&&vis[x-5][y+5]=='n'&&vis[x-6][y+6]=='g')
 84         {
 85             for (int i=0;i<=6;i++)
 86                 mark[x-i][y+i]=true;
 87         }
 88     }
 89     if(x>=0&&y-6>=0&&x+6<n&&y<n)
 90     {
 91         if(vis[x+1][y-1]=='i'&&vis[x+2][y-2]=='z'&&vis[x+3][y-3]=='h'&&vis[x+4][y-4]=='o'&&vis[x+5][y-5]=='n'&&vis[x+6][y-6]=='g')
 92         {
 93             for (int i=0;i<=6;i++)
 94                 mark[x+i][y-i]=true;
 95         }
 96     }
 97 }
 98 
 99 
100 int main()
101 {
102     fio;
103     cin>>n;
104     Clear(vis,0);
105     cnt=0;
106     for (int i=0;i<n;i++)
107         cin>>vis[i];
108     for (int i=0;i<n;i++)
109         for (int j=0;j<n;j++)
110         {
111             if(vis[i][j]=='y')  dfs(i,j);
112         }
113     for (int i=0;i<n;i++)
114     {
115         for (int j=0;j<n;j++)
116         {
117             if(mark[i][j]) cout<<vis[i][j];
118             else cout<<"*";
119         }
120         cout<<endl;
121     }
122 }
123 
124 
125 /*
126 8
127 qyizhong
128 gydthkjy
129 nwidghji
130 orbzsfgz
131 hhgrhwth
132 zzzzzozo
133 iwdfrgng
134 yyyygggg
135 */

猜你喜欢

转载自www.cnblogs.com/TheSilverMoon/p/9354741.html