ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

洛谷P1219 N皇后问题题解

洛谷P1219 N皇后问题题解 这是一道很好的DFS模版题很适合新手拿来理解dfs.题目描述有一个N*N的棋盘要在上面放N个棋子使每个棋子的行、列、对角线上都没有其他棋子要求输出前三种情况的序列a[i]j表示在i行j列有一个棋子最后输出总的情况数。数据范围6n13思路拆分由于我们不知道棋子具体可以放在哪些位置但可以确定的是肯定都不在一列或一行上所以我们可以用循环遍历列或行用深搜枚举每一个位置。完整代码#includebits/stdc.husingnamespacestd;intn;intcnt;inta[15];boolc[16],d1[30],d2[30];//当前行、当前主对角线左下到右上、当前副对角线是否合法boolcheck(intr,inti){return!c[i]!d1[r-in]!d2[ir];//检查当前位置是否合法}voiddfs(intr){if(rn){cnt;if(cnt3){for(inti0;in;i){couta[i]1 ;}coutendl;}return;}for(inti0;in;i)//遍历每一行{if(check(r,i))//检查{//放a[r]i;c[i]d1[r-in]d2[ir]true;dfs(r1);//回溯c[i]d1[r-in]d2[ir]false;}}}intmain(){cinn;dfs(0);coutcnt;return0;}
返回列表