c语言-八皇后问题在线等解答

问题描述

八皇后问题在线等解答

#include
#include
int place(int k,int x[])
{
int i=0;
for(i=1;i
if(fabs(k-i)==fabs(x[i]-x[k])||x[i]==x[k])return 0;
return 1;
}
void backstrack(int t,int n,int x[],int *sum)
{
int i;
if(t>n)(*sum)++;
else for(i=1;i<=n;i++)
{
x[t]=i;
if(place(t,x))backstrack(t+1,n,x,sum);
}
}
int main()
{
int i,sum=0,x[100],n=8;
for(i=0;i<=n;i++)
x[i]=0;
backstrack(1,n,x,&sum);
printf("%dn",sum);
return 0;
}
想知道具体是怎么回溯的,尤其是t>n之后程序是怎么继续的额

时间: 2024-09-16 14:35:20

c语言-八皇后问题在线等解答的相关文章

八皇后问题的C#解答

解答|问题 改编自V星[视窗王子]应答程序,如下:<br><br>using System;<br>class Queen{<br>    const int SIZE = 8;//皇后数<br>    public static void Main()<br>    {<br>        int[] Queen = new int [SIZE];//每行皇后的位置<br>        int y,x,i

C++实现八皇后问题的方法_C 语言

本文实例展示了C++实现八皇后问题的方法,是数据结构与算法中非常经典的一个算法.分享给大家供大家参考之用.具体方法如下: 一般在八皇后问题中,我们要求解的是一个8*8的国际象棋棋盘中,放下8个皇后且互相不能攻击的排列总数.皇后的攻击范围为整行,整列,以及其斜对角线. 由于皇后的攻击范围特性,注定我们每行只能放下一个皇后,于是我们要做的只是逐行放下皇后.八皇后问题是回溯法的典型问题.这里我们用的方法很简单: 从第一行开始逐个检索安全位置摆放皇后,一旦有安全位置则考虑下一行的安全位置.如果发现某行没

c语言-C++中的八皇后问题,编译通过了,但执行的时候为什么直接显示按任意键返回

问题描述 C++中的八皇后问题,编译通过了,但执行的时候为什么直接显示按任意键返回 #include//8*8的棋盘 #define max 8 int i,j; int e,s; char queen[max][max]; int main() { void fz(); void put(); void check(); void show(); void checkandput(); void checkagain(); for(i=0;i<max;i++) for(j=0;j<max;j

UVa 639:Don&#039;t Get Rooked, 类八皇后问题

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=580 题目类型: 暴力, 回溯法 题目: In chess, the rook is a piece that can move any number of squares vertically or horizontally. In this p

UVa 167:The Sultan&#039;s Successors, 八皇后问题

题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=108&page=show_problem&problem=103 题目类型: 回溯 原题: The Sultan of Nubia has no children, so she has decided that the country will be split into up to k separate

c语言问题-小白c语言求教,求大神解答

问题描述 小白c语言求教,求大神解答 #include int main(void) { int years,days; years=21; days=years*365; printf(" The years is %d. The days are %d. ".years,days); Return 0; } 程序无法运行,提示错误.求大神解答.小弟在这里先谢谢啦. 解决方案 printf(" The years is %d. The days are %d. "

C#用递归算法解决八皇后问题_C#教程

1.引子 中国有一句古话,叫做"不撞南墙不回头",生动的说明了一个人的固执,有点贬义,但是在软件编程中,这种思路确是一种解决问题最简单的算法,它通过一种类似于蛮干的思路,一步一步地往前走,每走一步都更靠近目标结果一些,直到遇到障碍物,我们才考虑往回走.然后再继续尝试向前.通过这样的波浪式前进方法,最终达到目的地.当然整个过程需要很多往返,这样的前进方式,效率比较低下. 2.适用范围 适用于那些不存在简明的数学模型以阐明问题的本质,或者存在数学模型,但是难于实现的问题. 3.应用场景 在

【算法导论】八皇后问题的算法实现(C、MATLAB、Python版)

        八皇后问题是一道经典的回溯问题.问题描述如下:皇后可以在横.竖.斜线上不限步数地吃掉其他棋子.如何将8个皇后放在棋盘上(有8*8个方格),使它们谁也不能被吃掉?         看到这个问题,最容易想到的就是遍历穷举法,不过仔细一想,思路虽然非常清晰,但是需要遍历次数太多,时间复杂度很高.那么,我们应该怎么办呢?下面给出算法思路:         算法思想:首先尝试在第一行放置第一个皇后,然后在第二行放置第二个使之与前面的皇后不构成威胁,依此类推.如果发现不能放置下一个皇后,就回

基于Delphi的八皇后问题动态实现

摘要 对于八皇后问题的实现,如果结合动态的图形演示,则可以使算法的描述更形象.更生动,使教学能产生良好的效果. 关键词 八皇后问题 冲突 数据结构 线程类 八皇后问题是一个古老而著名的问题,是回溯算法的典型例题.该问题是十九世纪著名的数学家高斯1850年提出:在8X8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,问有多少种摆法. 下面用delphi6实现的八皇后问题的动态图形程序,能够演示全部的92组解.八皇后问题动态图形的实现,主要应解决以下