当前位置: 首页 > news >正文

潍坊网站制作价格做招聘网站做服务器多少钱

潍坊网站制作价格,做招聘网站做服务器多少钱,无锡企业网站公司,怎么免费制作网站平台n−皇后问题是指将 n 个皇后放在 nn的国际象棋棋盘上#xff0c;使得皇后不能相互攻击到#xff0c;即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n#xff0c;请你输出所有的满足条件的棋子摆法。 输入格式 共一行#xff0c;包含整数 n。 输出…n−皇后问题是指将 n 个皇后放在 n×n的国际象棋棋盘上使得皇后不能相互攻击到即任意两个皇后都不能处于同一行、同一列或同一斜线上。 现在给定整数 n请你输出所有的满足条件的棋子摆法。 输入格式 共一行包含整数 n。 输出格式 每个解决方案占 n 行每行输出一个长度为 n 的字符串用来表示完整的棋盘状态。 其中 . 表示某一个位置的方格状态为空Q 表示某一个位置的方格上摆着皇后。 每个方案输出完成后输出一个空行。 注意行末不能有多余空格。 输出方案的顺序任意只要不重复且没有遗漏即可。 数据范围 1≤n≤9 输入样例 4输出样例 .Q.. ...Q Q... ..Q...Q. Q... ...Q .Q..国际象棋中的皇后可以直接攻击到她所在的行列斜方向上的棋子 思路这道题也是使用DFS来求解的关于DFS与递归的问题可以先看我的上一篇文章有图解排列数字DFS深度优先搜索-CSDN博客 一开始想的办法就是遍历枚举每一种情况第一行第一列放皇后之后如何第二行第二列放皇后之后如何但是这样太繁琐了。 不妨每次只看一行的情况遍历这一行上的每一列如果当前位置可以放则放下皇后然后进入下一行再次枚举放皇后直到每一行都放好了皇后这时候便得到了一种可行的摆法最开始是第一行第一列放皇后得到解之后或者位置矛盾就回溯return和if循环第一行第二列放皇后以此类推。 回溯则是从终止的那一列开始的已经输出或者位置矛盾不能放因为每一列都有一个for循环所以当前列终止之后会自动执行上一列的for循环如果还能循环的话也就是我们所谓的回到上一列继续枚举如果全部执行完毕就得到了全部结果。 这是DFS的代码 void dfs(int u) //u表示行输出每一行皇后的位置 {if( u n ) //到最后一个位置的下一位(所有位置都填满了){for(int i0;in;i) puts(g[i]); //输出第i行的棋盘状态g是二维数组这样是按行输出puts();return;}for(int i0;in;i) //对于一行枚举每一列的情况{//行是u列是i//dg下标n-uiudg下标ui如果下标相同就说明是同一条对角线if(!col[i] !dg[nu-i] !udg[ui]) //如果这一列没有放过对角线和反对角线也没有放过{g[u][i]Q; //在当前的位置放上皇后col[i] dg[nu-i] udg[ui] true; //记录当前位置已经被使用dfs(u1); //全部处理好后进入下一层col[i] dg[nu-i] udg[ui] false; //回溯的时候要恢复g[u][i].; //回溯要把这个位置的皇后去掉}} } 输出的时候是按行输出 if( u n ) //到最后一个位置的下一位(所有位置都填满了){for(int i0;in;i) puts(g[i]); //输出第i行的棋盘状态g是二维数组这样是按行输出puts();return;} 对于二维数组 g可以通过 g[i] 访问到第 i 行的字符串因为二维数组在内存中是按行存储的连续空间。 在 C 中二维数组可以看作是一维数组的数组。对于 g 这样的二维数组g[i] 表示的是第 i 个一维数组的起始地址即第 i 行的地址。由于数组名就是该数组的首地址因此可以直接使用 g[i] 来表示第 i 行。 其中 if(!col[i] !dg[nu-i] !udg[ui]) 这个判断条件是检查在当前点g[u][i]上的竖列正对角线和反对角线上是否有皇后因为我们是一行一行的输入然后按列枚举皇后在当前行的摆法所以不用判断行上有没有其他皇后。 dg和udg的下标可能较难理解如果图中的点位置用(x,y)表示x行y列那么这里的u对应行i对应列也就是(u,i)表示当前点的位置这里画图可知道同一条反对角线上ui是一样的而同一条正对角线上u-i是一样的但是因为这里用下标表示第几条正对角线下标不能为负所以我们加上一个n使下标为正数加上之后不影响下标表达比如原来正对角线的下标有-3-127我们加上一个n4之后就变为1,3,6,11实际上每个下标还是分开的能映射到对应的正对角线 示例代码 #includeiostream using namespace std; const int N20; //对角线是格子的两倍长 char g[N][N]; //记录棋盘状态信息 bool col[N],dg[N*2],udg[N*2]; //col列dg记录正对角线的占用情况udg记录负对角线的占用 int n;void dfs(int u) //u表示行输出每一行皇后的位置 {if( u n ) //到最后一个位置的下一位(所有位置都填满了){for(int i0;in;i) puts(g[i]); //输出第i行的棋盘状态g是二维数组这样是按行输出puts();return;}for(int i0;in;i) //对于一行枚举每一列的情况{//行是u列是i//dg下标n-uiudg下标ui如果下标相同就说明是同一条对角线if(!col[i] !dg[nu-i] !udg[ui]) //如果这一列没有放过对角线和反对角线也没有放过{g[u][i]Q; //在当前的位置放上皇后col[i] dg[nu-i] udg[ui] true; //记录当前位置已经被使用dfs(u1); //全部处理好后进入下一层col[i] dg[nu-i] udg[ui] false; //回溯的时候要恢复g[u][i].; //回溯要把这个位置的皇后去掉}} } int main() {cinn;for(int i0;in;i){for(int j0;jn;j){g[i][j].; //初始化棋盘全部为.}}dfs(0); //从第0行开始看} 关于代码运行的流程n4的情况 注意不仅是return有回溯到上一列的效果当进入递归中上一列的for循环也是可以让当前列回溯到上一列。
http://www.yutouwan.com/news/188674/

相关文章:

  • 广西建设中心培训网站如何引用网站上的资料做文献
  • discuz品牌空间网站wordpress写文章页面无法显示
  • 成都网站关键字优化wordpress 中文文件重命名
  • 做蛋糕网站的优点wordpress中文博客
  • 做国外贸易哪个网站好深圳 网站开发
  • 宾馆网站模板wordpress如何添加tag标签页面
  • 太仓做网站的wordpress 豆瓣fm
  • wap门户网站源码做动态效果的插件网站
  • 微信公众号 网站开发详情页模板软件
  • 个人网站需要备案模板之家免费官网下载
  • 焊枪公司网站怎么做响水县住房和城乡建设局网站
  • 做问答网站要多少钱徐州 商城网站
  • 网站总体规划设计说明营销战略咨询
  • 中亿丰建设集团股份有限公司网站设计素材网站哪个好用
  • 做网站一般要了解哪些网站开发工具微软
  • 进不去的网站用什么浏览器wordpress同时置顶多篇文章
  • 科协科普网站建设建立企业网站的详细步骤
  • 给别人做网站前要问些什么问题单位网站建设流程
  • 江西网站建设公司排名unas做网站服务器
  • 如何建设红色旅游网站软文推广教程
  • 用php做网站视频海贼王路飞和女帝做的网站
  • 济南网站建设在哪里给实体店老板做的网站
  • 韶关市建设与房地产信息网站北京编程培训学校哪个好
  • 做娱乐网站彩票代理英文站用wordpress
  • 想要去国外网站买东西怎么做手机网站大全网址大全
  • 松江php网站开发培训在公司的小语种网站上
  • 网站移动适配怎么做wordpress获取自定义分类名
  • 襄阳 网站建设医院做网站运维
  • 做电影网站的程序免费的代码分享网站
  • 有做网站运营的吗创意网站界面