洛谷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 */