第一次刷POJ的题目,有点恶心
题目来自:http://poj.org/problem?id=1321
2 1 #. .# 4 4 ...# ..#. .#.. #... -1 -1
2 1
作者分析:使用回溯法,这道题是一道变形的八皇后问题,良心的是它不用计算对角线,vis数组判断这一行是否可以放置棋子,详情见以下代码。、
#include <iostream> #include <cstring> using namespace std; char a[10][10]; int vis[10],n,m,k,ans = 0; void search(int x){ if (m == k){ ans++; return; } if (x >= n){ return; } for (int i = 0;i < n;i++){ if (vis[i] == 0 && a[x][i] == ‘#‘){ vis[i] = 1; m++; search(x+1); vis[i] = 0; m--; } } search(x+1); } int main(){ while (scanf("%d%d",&n,&k) && n != -1 && k != -1){ m = 0; ans = 0; for (int i = 0;i < n;i++){ cin >> a[i]; } memset(vis,0,sizeof(vis)); search(0); cout << ans << endl; } return 0; }
原文:https://www.cnblogs.com/linyiweiblog/p/14529259.html