首页 > 代码库 > N皇后问题
N皇后问题
#include<iostream> using namespace std; int vis[3][30];//分别表示列,主对角线和副对角线是否被占用,若用(row,col)表示第row行第col列位置(row,col)均从0开始 //则列所在位置为col,主对角线所在位置为n-row+col,副对角线所对应的位置为row+col int ans ,MAXN; void dfs(int row) { if (row == MAXN) { ++ans; return ; } else { for (int col =0; col <MAXN; ++col) { if (!vis[0][col] && !vis[1][col+row] && !vis[2][MAXN-row+col]) { vis[0][col] = vis[1][col+row] = vis[2][MAXN-row+col] = 1; dfs(row+1); vis[0][col] = vis[1][col+row] = vis[2][MAXN-row+col] = 0; } } } } int PlaceQueenMethodNum(int n) { /*在这里实现功能*/ MAXN =n; ans =0; memset(vis,0,sizeof(vis)); dfs(0); return ans; } int main() { ans =0; int last[11]; for (int i=1; i < 11; ++i) { ans =0; last[i] = PlaceQueenMethodNum(i); } int n; while (cin>>n && n != 0) { cout<<last[n]<<endl; } return 0; }
N皇后问题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。