【wikioi】1295 N皇后问题
算法:DFS
刚开始卡了我一下,我竟然傻到用二维来放皇后= =。导致一直TLE。。。。
其实用1维就行了的,下标为行(列),值为列(行)
我是用下标为列做的。
上代码
#include <iostream> using namespace std; int n, ans = 0; int map[14]; void dfs(int x) { if(x > n) {ans++; return;} int i, j; for(i = 1; i <= n; i++) //放在某行 { map[x] = i; for(j = 1; j < x; j++) //判断前面列是否有重合,直接判断横行 和 斜行 (可自己画图为什么判断斜行成立) if((map[j] == map[x]) || (x-map[x] == j-map[j] || x+map[x] == j+map[j])) break; if(j == x) dfs(x+1); } } int main() { cin >> n; dfs(1); cout << ans; return 0; }
博客地址:www.cnblogs.com/iwtwiioi 本文为博主原创文章,未经博主允许不得转载。一经发现,必将追究法律责任。