1321:棋盘问题
搜索,dfs
不難
思路:
參考:https://blog.csdn.net/coding_sun/article/details/77412738
//搜索,dfs #include <iostream> #include <cstring> using namespace std;const int N = 8;char chess[N][N]; int vis[N]; int n, k,cnt;//從第a行開始,需要處理b個棋子 void dfs(int a, int b) {int i, j; if (b == 0) {cnt++;return;//返回上層dfs,繼續尋找下一種方案}for (i = a; i < n; i++) {for (j = 0; j < n; j++) {//假如chess[i][j]處是棋盤且該列未被訪問過if (chess[i][j] == '#' && vis[j] == 0) {vis[j] = 1;dfs(i + 1, b - 1);//遞歸vis[j] = 0;//回溯}}} }int main() { int i, j;while (cin >> n >> k) {if (n == -1) break;cnt = 0;memset(vis, 0, sizeof(vis));for (i = 0; i < n; i++) {for (j = 0; j < n; j++)cin >> chess[i][j];}dfs(0, k);cout << cnt<< endl;}return 0; }總結
- 上一篇: Java-面向对象进阶2
- 下一篇: Github Desktop出现Auth