站外题,急!(玄3关)

题目总版

@[Wendy_Hello](/user/1039211) ```cpp #include<bits/stdc++.h> #define N 100 using namespace std; int a[N][N],b[N]; int vis[N][N]; int tot; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; void dfs(int step) { if(step==8+1) { tot++; for(int i=1;i<=8;i++) a[tot][i]=b[i]; return; } for(int i=1;i<=8;i++) { if(vis[0][i]==0&&vis[1][step+i]==0&&vis[2][step-i+8]==0) { vis[0][i]=1; vis[1][i+step]=1; vis[2][step-i+8]=1; b[step]=i; dfs(step+1); vis[0][i]=0; vis[1][i+step]=0; vis[2][step-i+8]=0; } } } int main() { int n; cin>>n; dfs(1); while(n--) { int i; cin>>i; for(int j=1;j<=8;j++) cout<<a[i][j]; cout<<endl; } return 0; } ```
by Dream_Creator @ 2024-04-16 20:31:03


@[Dream_Creator](/user/529722) **主要就是判断第几个皇后串时不是很会,不知大佬能否传我一技呢**
by Wendy_Hello @ 2024-04-16 20:33:17


```cpp #include <bits/stdc++.h> using namespace std; int n, t = 1, ans, a[10], A,mp[100][10]; bool b[10], c[10], d[10]; void dfs (int x) { if (x > 8) { ans++; for(int i=1;i<=8;i++) mp[ans][i]=a[i]; return; } else { for (int i = 1; i <= 8; i++) { if (b[i] == 0 && c[x - i + 7] == 0 && d[x + i] == 0) { a[x] = i; b[i] = 1; c[x - i + 7] = 1; d[x + i] = 1; dfs (x + 1); b[i] = 0; c[x - i + 7] = 0; d[x + i] = 0; } } } } int main() { dfs(1); scanf ("%d", &n); while(n--) { scanf("%d" ,&A); for(int i=1;i<=8;i++) { printf("%d",mp[A][i]); } puts(""); } return 0; } ``` @[Wendy_Hello](/user/1039211)
by z_z_b_ @ 2024-04-16 20:34:24


题目并没有保证cin[i]<=cin[i+1],所以会漏解 (哎呀,好像晚了awa)
by z_z_b_ @ 2024-04-16 20:35:21


@[z_z_b_](/user/956129) **非常感谢(捂脸:没事)**
by Wendy_Hello @ 2024-04-16 20:36:51


@[z_z_b_](/user/956129) **用了大佬的代码,发现从83开始输出的就是00000000了,该怎么改一下?**
by Wendy_Hello @ 2024-04-16 20:55:02


?你的问题吧,我直接复制是有解的 @[Wendy_Hello](/user/1039211)
by z_z_b_ @ 2024-04-16 20:57:29


@[z_z_b_](/user/956129) **好,我瞅瞅**
by Wendy_Hello @ 2024-04-16 21:01:56


|