C语言八皇后问题的算法问题 5C

#include

int chess[8][8];
int count = 0;

int judge(int r,int c)
{
int i;
int j;

``````for(i=0;i<8;i++)
``````

{
if(chess[i][c])
return 0;
}
for(i=r,j=c;i>=0&&j>=0;i--,j--)
{
if(chess [i][j])
return 0;
}
for(i=r,j=c;i>=0&&j<8;i--,j++)
{
if(chess[i][j])
return 0;
}
return 1;

}

void eightQueen()
{
int stack[10];
int top = 0;
int i,k;

``````while(top>=0)
for(;stack[top]<8; stack[top]++)
{

k = stack[top];
if(judge(top,k))
{
chess[top][k] = 1;
break;
}
}
if (top == 7 && stack[top]<8)
{
count++;
stack[top]++;
}
else if(stack[top] < 8 && top <7)
{
top++;
}
else if (stack[top] == 8 && top <=7)
{
for (i=0;i<8;i++)
{
chess[top][i] = 0;
chess[top-1][i] = 0;

}
stack[top--] = 0;
stack[top]++;
}
``````

}
void main()
{
int i ;
int j ;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess[i][j] = 0;
}
}

``````eightQueen();
printf("八皇后的个数%d"，count);
``````

}

6个回答

``````     #include <stdio.h>
#include <stdlib.h>
#define N 8

int column[N+1];//同栏是否有皇后
int rup[2*N +1];//右上至左下是否有皇后
int lup[2*N +1];//左上至右下是否有皇后
int queen[N+1] = {0};
int num ;//解答编号

void backtrack(int);//递回求解

main(void)
{
int i;
num = 0;
for(i=1;i<=N;i++)
column[i] = 1;

for(i=1;i<=2*N;i++)
rup[i] = lup[i] = 1;

backtrack(1);

system("pause");
return 0;
}

{
int x,y;
printf("\n 解答 %d\n",++num);
for (y=1;y<=N;y++)
{
for (x=1;x<=N;x++)
{
if(queen[y] == x)
printf("Q");
else
printf("K");
}
printf("\n");
}
}

void backtrack(int i)
{
int j;
if(i > N)
else
for (j=1;j<=N;j++)
{
if(column[j] == 1 && rup[i+j] == 1 &&lup[i-j+N] == 1){
queen[i] = j;
//设定为占用
column[j] = rup[i+j] = lup[i-j+N] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角递归完后进行下一个位置的递归运算
}
}
}
``````

``````  #include <stdio.h>
#include <stdlib.h>
#define N 8

int column[N+1];//同栏是否有皇后
int rup[2*N +1];//右上至左下是否有皇后
int lup[2*N +1];//左上至右下是否有皇后
int queen[N+1] = {0};
int num ;//解答编号

void backtrack(int);//递回求解

main(void)
{
int i;
num = 0;
for(i=1;i<=N;i++)
column[i] = 1;

for(i=1;i<=2*N;i++)
rup[i] = lup[i] = 1;

backtrack(1);

system("pause");
return 0;
}

{
int x,y;
printf("\n 解答 %d\n",++num);
for (y=1;y<=N;y++)
{
for (x=1;x<=N;x++)
{
if(queen[y] == x)
printf("Q");
else
printf("K");
}
printf("\n");
}
}

void backtrack(int i)
{
int j;
if(i > N)
else
for (j=1;j<=N;j++)
{
if(column[j] == 1 && rup[i+j] == 1 &&lup[i-j+N] == 1){
queen[i] = j;
//设定为占用
column[j] = rup[i+j] = lup[i-j+N] = 0;
backtrack(i+1);
column[j] = rup[i+j] = lup[i-j+N] = 1; //在左下角递归完后进行下一个位置的递归运算
}
}
}
``````

while循环没有加大括号
stack是在函数内定义的，要全部初始化为0

a414878523 还有stack[top]++这行，需要加上top>=0的条件，top可能会是-1的，数组越界

//非递归、只用一个一维数组

`````` #include "stdio.h"
#define TRUE 1
#define FALSE 0

char sign;
int b[8];
outputresult (int b[8])
{
int i;
for (i = 1; i <= 8; i++)
printf("  ( %d,%d) ",b[i - 1],i);
printf("\n");

}

int main()
{
int i,n,k;
char c;

n = 0;
for (i = 1; i <= 8; i++)
b[i - 1] = 0;
k = 1;
do {
b[k - 1] = (b[k - 1] + 1) % 9;
if (b[k - 1] == 0)
k = k - 1;
else  {
sign = TRUE;
for (i = 1; i <= k - 1; i++)
sign = sign && (b[i - 1] != b[k - 1]) &&
(k-i != abs(b[k - 1] - b[i - 1]));
if (sign)
if (k == 8)
{                  /*output*/
outputresult(b);
n = n + 1;
if (n % 22 == 0)
{
printf("Press Enter to continue!\n");
gets(c);
}
}    /*End output*/
else
k = k + 1;
}
} while (!(k == 0));
printf("There are %d kind of conditions in total.\n",n);
return 0;

}
/*b[i]: The number of the line which the queen lies in.    */
/*i   : The number of the column which the queen lies in.  */
``````

`````` #include <cstdio>
#include <cstring>

int chess[8][8];
int count = 0;

int judge(int r,int c)
{
int i;
int j;

for(i=0;i<8;i++)
{
if(chess[i][c])
return 0;
}
for(i=r,j=c;i>=0&&j>=0;i--,j--)
{
if(chess [i][j])
return 0;
}
for(i=r,j=c;i>=0&&j<8;i--,j++)
{
if(chess[i][j])
return 0;
}
return 1;
}

void eightQueen()
{
int stack[10];
memset(stack, 0, sizeof(stack));
int top = 0;
int i,k;

while(top>=0) {
for(;stack[top]<8; stack[top]++)
{

k = stack[top];
if(judge(top,k))
{
chess[top][k] = 1;
break;
}
}
if (top == 7 && stack[top]<8)
{
count++;
stack[top]++;
}
else if(stack[top] < 8 && top <7)
{
top++;
}
else if (stack[top] == 8 && top <=7)
{
for (i=0;i<8;i++)
{
chess[top][i] = 0;
chess[top-1][i] = 0;

}
stack[top--] = 0;
if (top >= 0)
stack[top]++;
}
}
}
int main()
{
int i ;
int j ;
for(i=0;i<8;i++)
{
for(j=0;j<8;j++)
{
chess[i][j] = 0;
}
}

eightQueen();
printf("%d", count);
}

``````

``````//c[i]:第i行的皇后放在第几列
#include<iostream>
using namespace std;
int n, c[20], ans;
void dfs(int cur){
if(cur > n)ans++;
else for(int i = 1; i <= n; i++){
int ok = 1;
for(int j = 1; j < cur; j++)
if(c[j]==i || c[j]-j==i-cur || c[j]+j==i+cur)
{ ok = 0; break; }
if(ok){
c[cur] = i;
dfs(cur+1);
}
}
}
int main(){
cin>>n;
dfs(1);
cout<<ans<<"\n";
return 0;
}
``````

c语言生成数独表的算法

C语言求解：8皇后问题
8皇后问题：要在8×8的国际象棋棋盘中放8个皇后，使任意两个皇后都不能相互吃掉。规则是皇后能吃同一行同一列同一对角线的任意棋子。求所有的解。 8皇后问题推广：要在n×n的国际象棋棋盘中放n个皇后，使任意两个皇后都不能相互吃掉。规则是皇后能吃同一行同一列同一对角线的任意棋子。求所有的解。
c语言学习数据结构和算法有什么好书推荐吗？
c语言学习数据结构和算法有什么好书推荐吗？ 求大神告知一下，谢谢了

C语言 算法：打分问题！！！
# 题目是这样的：有n个评委，给体操运动员打分（10分制），运动员得分结果为去掉一个最高分，去掉一个最低分，然后在求平均值即为运动员的得分。 ## 求问大神们（如果评委人数<=2，则输出"评委人数不够"）这个该怎么写进去，我用了while但是好像行不通，大家帮忙看看！谢谢！ ``` #include<stdio.h> int main() { int n,i; float a[1000],sum = 0; float max=0,min=11; scanf("%d",&n); for(i=0;i<n;i++) { scanf("%f", &a[i]); } for(i=0;i<n;i++) { if(a[i]>max) max=a[i]; if(a[i]<min) min=a[i]; sum+=a[i]; } printf("%.2f\n",(sum-max-min)*1.0/(n-2)); } ```
C语言中关于矩阵算法的问题

c语言算法实现功能的题目
C语言对角线翻转算法，麻烦讲一下原理？
#include <iostream> #include <iomanip> using namespace std; int main() { const int row = 4; int temp; int i,j; int sz[row][row] = {{1,2,3,4},{5,6,7,8},{9,10,11,12},{13,14,15,16}}; cout<<"初始状态"<<endl; for(i = 0;i<row;i++) { for(j=0;j<row;j++) cout<<setw(4)<<sz[i][j]; cout<<endl; } for(i=0;i<row;i++) { for(j=i+1;j<row;j++) { temp = sz[i][j]; sz[i][j] = sz[j][i]; sz[j][i] = temp; } } cout<<"翻转后状态"<<endl; for(i=0;i<row;i++) { for(j=0;j<row;j++) { cout<<setw(4)<<sz[i][j]; } cout<<endl; } return 0; }
swift未解决八皇后的问题代码

(已解决)自己用java写的八皇后问题算法，可是不行,求告知原因
``` public class Test { public static void main(String[] args) { Empress a=new Empress(); a.find(0,0); System.out.println(a.map); } } class Empress{ public int[][] arry=new int[8][8]; public int map=0; public boolean rule(int arry[][],int k,int j){ //判断节点是否合适 for(int i=0;i<8;i++){ //行列冲突 if(arry[k][i]==1) return false; else if(arry[i][j]==1) return false; } for(int i=k-1,m=j-1;i>=0&&m>=0;i--,m--){ //左对角线 if(arry[i][m]==1) return false; } for(int i=k-1,m=j+1;i>=0&&m<=7;i--,m++){ //右对角线 if(arry[i][m]==1) return false; } return true; } public void find(int i,int m){ //寻找皇后节点 if(i>7){ //皇后解 map++; }else{ for(int j=i+1;j<8;j++){ //刷新当前结点下的数组 for(int k=0;k<8;k++){ arry[j][k]=0; } } for(;i<8;i++){ //深度优先搜索 for(;m<8;m++){ if(rule(arry,i,m)){ arry[i][m]=1; find(i+1,0); } } } } } } ```
C语言实现普兰特准数计算的算法请问怎么实现？普兰特准数的基数判定是什么？
C语言实现普兰特准数计算的算法请问怎么实现？普兰特准数的基数判定是什么？
Java语言如何实现一个算法
Java语言如何实现一个算法，我要计算1 2 3 4 4个数字，每3个数字相加乘以另一个数字的倒数，最小的那个

**用C编写一个八数码的优先搜索算法，要求把每一步移动的内容在控制台打印出来。**
01背包相关问题c语言算法设计课程设计

c语言中的算法和逻辑问题
c/c++大牛解释一下熊猫烧香里的算法O(∩_∩)O~~谢谢！！！！！！！！

Java学习的正确打开方式

linux系列之常用运维命令整理笔录

python 简易微信实现（注册登录+数据库存储+聊天+GUI+文件传输）
socket+tkinter详解+简易微信实现 历经多天的努力，查阅了许多大佬的博客后终于实现了一个简易的微信O(∩_∩)O~~ 简易数据库的实现 使用pands+CSV实现数据库框架搭建 import socket import threading from pandas import * import pymysql import csv # 创建DataFrame对象 # 存储用户数据的表（...

Python十大装B语法
Python 是一种代表简单思想的语言，其语法相对简单，很容易上手。不过，如果就此小视 Python 语法的精妙和深邃，那就大错特错了。本文精心筛选了最能展现 Python 语法之精妙的十个知识点，并附上详细的实例代码。如能在实战中融会贯通、灵活使用，必将使代码更为精炼、高效，同时也会极大提升代码B格，使之看上去更老练，读起来更优雅。

2019年11月中国大陆编程语言排行榜
2019年11月2日，我统计了某招聘网站，获得有效程序员招聘数据9万条。针对招聘信息，提取编程语言关键字，并统计如下： 编程语言比例 rank pl_ percentage 1 java 33.62% 2 cpp 16.42% 3 c_sharp 12.82% 4 javascript 12.31% 5 python 7.93% 6 go 7.25% 7 p...

《奇巧淫技》系列-python！！每天早上八点自动发送天气预报邮件到QQ邮箱

JavaScript 为什么能活到现在？

Nginx 原理和架构
Nginx 是一个免费的，开源的，高性能的 HTTP 服务器和反向代理，以及 IMAP / POP3 代理服务器。Nginx 以其高性能，稳定性，丰富的功能，简单的配置和低资源消耗而闻名。 Nginx 的整体架构 Nginx 里有一个 master 进程和多个 worker 进程。master 进程并不处理网络请求，主要负责调度工作进程：加载配置、启动工作进程及非停升级。worker 进程负责处...

Python 编程开发 实用经验和技巧
Python是一门很灵活的语言，也有很多实用的方法，有时候实现一个功能可以用多种方法实现，我这里总结了一些常用的方法和技巧，包括小数保留指定位小数、判断变量的数据类型、类方法@classmethod、制表符中文对齐、遍历字典、datetime.timedelta的使用等，会持续更新......

“狗屁不通文章生成器”登顶GitHub热榜，分分钟写出万字形式主义大作

《程序人生》系列-这个程序员只用了20行代码就拿了冠军

11月8日，由中国信息通信研究院、中国通信标准化协会、中国互联网协会、可信区块链推进计划联合主办，科技行者协办的2019可信区块链峰会将在北京悠唐皇冠假日酒店开幕。 　　区块链技术被认为是继蒸汽机、电力、互联网之后，下一代颠覆性的核心技术。如果说蒸汽机释放了人类的生产力，电力解决了人类基本的生活需求，互联网彻底改变了信息传递的方式，区块链作为构造信任的技术有重要的价值。 　　1...
Python 植物大战僵尸代码实现(2):植物卡片选择和种植