这题用dfs,它递归结束条件为什么是s>n(棋盘大小),而不能是s==n呢

P1219 [USACO1.5] 八皇后 Checker Challenge

请放上您的代码 @[cpulxb](/user/1202918)
by zengziqvan @ 2024-01-24 23:00:15


在输入栏上面有一栏插入代码
by zengziqvan @ 2024-01-24 23:01:35


```cpp //刚刚又看了看,不知道我下面的理解对不都对 #include<bits/stdc++.h> using namespace std; int n; int vis1[100]; int vis2[100]; int vis3[100]; int chess[13]; int sum;//多少种方案 void dfs(int s)//s代表第s行的位置 { if(s>n)//s>n代表已经填完第s行了,不能写s==n,因为此时的第s行还没有 //通过for循环确定其位置 { sum++; if (sum<= 3) { for (int i =1; i <=n; i++) cout << chess[i]<<" "; cout << endl; } return; } for (int j =1; j<=n; j++) { if (vis1[j] == 0 && vis2[j + s] == 0 && vis3[s - j +n] == 0) { chess[s] = j; vis1[j] = 1; vis2[j + s] = 1; vis3[s - j +n] = 1; dfs(s + 1); vis1[j] = 0; vis2[j + s] = 0; vis3[s - j +n] = 0; } } } int main() { cin >> n; dfs(1); cout << sum; return 0; }
by cpulxb @ 2024-01-24 23:03:27


是的 s==n的时候n还没放
by KongY11 @ 2024-01-25 17:42:51


|