N皇后问题(C语言)—回溯法
一、问题描述
问题描述:在N×N格的国际象棋上摆放N个皇后,使其不能互相攻击,即不能处于同一列或同一行,也不能处在同一斜线上,请问有多少种摆法?
不能放皇后的位置及位置之间的关系:
二、代码实现
#include <stdio.h>int array[20];//数组大小,a[i] = j表示第i个皇后放在第i行的第j个位置
int n,cnt;//n为皇后的个数 int check(int x,int y)//x为行,y为放置的位置
{int i = 1;for(;i <= x ;i++){if(array[i] == y)return 0;//前面几行已经在y位置上有元素 if(array[i] + i == x + y)return 0;//上右下左对角线if(i - array[i] == x-y)return 0;//上左下右对角线 }return 1;
}
void dfs(int row)//第row个皇后
{int i,j;if(row == n+1)//此时已有一个解{cnt++;for(j=1;j<=n;j++){printf("%d ",array[j]);}printf("\n");return ;}for(i = 1;i <= n;i++)//从一横排的所有位置开始,判断是否该位置能放皇后 {if(check(row,i)) //第row个皇后能否放在i位置{array[row] = i;dfs(row+1);//接着放下一个array[row] = 0;//回溯 } }
}
void main()
{scanf("%d",&n);dfs(1);printf("%d个皇后一共有%d个解",n,cnt);
}
三、运行结果
四、总结
主要是要搞清楚不能放的位置之间的数字关系
N皇后问题(C语言)—回溯法相关推荐
- 回溯算法背包问题迭代c语言,回溯法解决0_1背包问题(迭代和递归)
问题:0/1背包问题 例子:weight数组代表物品重量,value数组代表物品价值,M代表背包容量.背包是按单位价值递减的顺序排列的,即value[i]/weight[i]>value[i-1 ...
- C语言回溯法九宫格数独问题
Problem H 数独游戏 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 数独游戏规则 在9阶方阵中,包含了81个小格(九列九行),其中又再分成九个小正方形(称为宫),每 ...
- c语言回溯法,回溯法 实现 排列组合(C 语言版本)
* 所谓回溯:就是搜索一棵状态树的过程,这个过程类似于图的深度优先 * 搜索(DFS),在搜索的每一步(这里的每一步对应搜索树的第i层)中 * 产生一个正确的解,然后在以后的每一步搜索过程中,都检查其 ...
- 回溯法(八皇后问题)及C语言实现
回溯法,又被称为"试探法".解决问题时,每进行一步,都是抱着试试看的态度,如果发现当前选择并不是最好的,或者这么走下去肯定达不到目标,立刻做回退操作重新选择.这种走不通就回退再走的 ...
- 从八皇后问题思考回溯法
一.八皇后问题 八皇后是经典的回溯法问题,题目是说将八个皇后,放到8×8的国际象棋棋盘中中,使得任意两个皇后都不能在同一行.同一列以及同一条对角线上.下图是一个四皇后的搜索示意图. 八皇后问题可以通过 ...
- python回溯算法_什么是回溯法,Python解法交流?
只有去多做题,才能慢慢掌握.力扣leetcode-cn.com LeetCode 上的解释 回溯算法实际上一个类似枚举的搜索尝试过程,主要是在搜索尝试过程中寻找问题的解,当发现已不满足求解条件时,就 ...
- n皇后问题c语言_九章算法 | N皇后问题
n皇后问题是将n个皇后放置在n*n的棋盘上,皇后彼此之间不能相互攻击(任意两个皇后不能位于同一行,同一列,同一斜线). 给定一个整数n,返回所有不同的n皇后问题的解决方案. 每个解决方案包含一个明确的 ...
- 八皇后问题(回溯法)C语言求解
方法一: //N_Queen #include<iostream> using namespace std; #define N 100 //定义最多求解100皇后问题 int x[N]; ...
- c语言实现全排列并存储,C语言实现全排列和回溯法总结
一.递归实现全排列 #include"cstdio" int A[]; void print_permutation(int n,int *A,int cur){ if(cur== ...
最新文章
- 部署可扩展的目标检测管道:推理过程(上)
- Android Studio 插件的使用
- js中json对象取键和值
- Protobuf3 + Netty4: 在socket上传输多种类型的protobuf数据
- 工业机器人九龙坡区职教中心_山西省襄汾县职教中心“智能工业机器人订单班”学生集体观看直播“2020一带一路暨金砖国家技能发展与技术创新大赛”...
- set和multiset集合容器
- Qt简单的解析Json数据例子(一)
- Java程序实现密钥库的维护
- php怎么修改滑动条,修改滚动条样式的方法
- Android Studio打开项目提示找不到sdk路径的问题。
- 屏蔽网站广告的Chrome谷歌浏览器插件推荐和下载地址
- 百度OCR图像识别(包含自定义模板)
- 哈工大2022形式语言与自动机期末
- 二维数组定义及初始化
- 怎样校验MD5码及sha1码数值(适用于Windows及Linux平台)
- NLP task2 N-Gram
- git 报错解决方法:Your branch is ahead of ‘origin/dev‘ by 65 commits.
- Linux下强制关闭程序
- ListView+Fragment实现导航栏
- vue集成svg-sprite-loader