c-八皇后问下 ,算法题目

问题描述

八皇后问下 ,算法题目

帮忙看下这个八皇后的错哪里了
#include
int nodanger(int row,int n,int (*a)[8])
{
int i;
int k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
//列

5个flag判断5个方向有没有危险
for( i=0; i
{
if (*(*(a+i)+n)!=0)
{
flag1=1;
break;
}
}
//左上
for(i=row,k=n;i>0&&k>0;--i,--k)
if (*((*a+i)+k)!=0)
{
flag2=1;
break;
}
//右上
for(i=row,k=n;i0;++i,--k)
if(*(*(a+i)+k)!=0)
{
flag3=1;
break;
}
//左下
for(i=row,k=n;i>0&&k<8;--i,++k)
{
if(*(*(a+i)+k)!=0)
{
flag4=1;
break;
}
}
//右下
for(i=row,k=n;i<8&&k<8;++i,++k)
{
if(*(*(a+i)+k)!=0)
{
flag5=1;
break;
}
} if(flag1==1||flag2==1||flag3==1||flag4==1||flag5==1)
{
return 1;
}
else
{
return 0;
}
}
void eightqueen(int row,int n,int (*a)[8 ] )
{
int b[8][8];
int i,j;
for(i=0;i<8;i++)
for(j=0;j<8;j++)
b[i][j]=a[i][j];
if(8==row)
{
for (i=0;i<8;i++)
for (j=0;j<8;j++)
{
printf ("%d",b[i][j]);
}
printf("n");
}
else //还没找完,继续找
{
for(j=0;j<8;j++)
if(nodanger (row,j,a))//ror行j列有没有问题
{
for(i=0;i<8;i++)
{
* (*((b+row)+i))=0;
}
((b+row)+j)=1;
eightqueen(row+1,j,a);//继续下一行
}
}
}
int main()
{
int i,j;
int a[8][8];
for(i=0;i<8;i++)
for(j=0;j<8;j++)
a[i][j]=0;
eightqueen(0,8,a);
return 0;
}

解决方案

http://wenku.baidu.com/link?url=Nw4pYpRqMupd9Bn3OfkFBoYM6Hhw9TqWvffZHX-GDQYPCTtqo1vABPHZPKyXl-YcG2LOybz798I4i4kP7IUuRyKGL_X2vIDgAH1ftQU6Ygu

时间: 2024-08-23 21:46:08

c-八皇后问下 ,算法题目的相关文章

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

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

皇后控制问题 acm问题问下

问题描述 皇后控制问题 acm问题问下 皇后控制问题 查看 提交 统计 提问 总时间限制: 10000ms 单个测试点时间限制: 1000ms 内存限制: 128000kB 描述 在一个n×n个方格组成的棋盘上的任一方格中放置一个皇后,该皇后可以控制他所在的行,列以及对角线上的所有方格.对于给定的自然数n,在n×n个方格组成的棋盘上最少要放置多少个皇后才能控制棋盘上的所有方格,且放置的皇后互不攻击? 编程任务:设计一个算法,对于给定的自然数n (1≤n≤100)计算在n×n个方格组成的棋盘上最少

常用算法:C#八皇后问题

八皇后问题是一个古老而著名的问题,是回溯算法的典型应用.八皇后问题就是棋盘上的8个皇后不能在同一行.一列或一条斜线上,在8!=40320种排列中共有92种解决方案.代码如下: using System; using System.Collections.Generic; using System.Text;namespace ExQueen { class Queen { public void QueenArithmetic(int size){ int[] Queen = new int[s

八皇后算法问题

问题描述 问题是下面算法,为什么得不到真确结果?publicclassTest{publicstaticintn=8;//棋盘行列数publicstaticintcount=0;//皇后解法个数publicstaticQueen[]stack=newQueen[n];//皇后栈publicstaticinttop=0;//栈顶//利用栈publicstaticvoidsearch3(){//cur行if(top==n){count++;}else{for(inti=0;i<n;i++){//顺序

递归-(已解决)自己用java写的八皇后问题算法,可是不行,求告知原因

问题描述 (已解决)自己用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

各大计算机公司 笔试及面试 题目 - 深信服(八皇后问题)

八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行.纵行或斜线上.八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n.当且仅当 n = 1 或 n ≥ 4 时问题有解. 在n×n格的棋盘上摆放n个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同一列或同一斜线上,求解满足条件的棋盘布局. n-皇后问题是典型的可以使用回溯算法

问一道acm题目,下楼梯递归的

问题描述 问一道acm题目,下楼梯递归的 下楼梯查看 提交 统计 提问总时间限制: 1000ms 内存限制: 1000kB描述从楼上走到楼下共有h个台阶,每一步有3种走法:走1个台阶,走2个台阶,走3个台阶.问可走出多少种方案,并打印出具体方案?输入台阶个数h输出各种走法方案及总方案个数样例输入5样例输出plan 1:32plan 2:311plan 3:23plan 4:221plan 5:212plan 6:2111plan 7:131plan 8:122plan 9:1211plan 10

问一道编程题目,大家帮忙看下谢了

问题描述 问一道编程题目,大家帮忙看下谢了 拼点游戏 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 C和S两位同学一起玩拼点游戏.有一堆白色卡牌和一堆蓝色卡牌,每张卡牌上写了一个整数点数.C随机抽取n张白色卡牌,S随机抽取n张蓝色卡牌,他们进行n回合拼点,每次两人各出一张卡牌,点数大者获得三颗巧克力,小者获得一颗巧克力,如果点数相同,每人各得二颗巧克力,使用过的卡牌不得重复使用.已知C和S取到的卡牌点数,请编程计算S最多和最少能得到多少颗巧克力. 输入 输

acm icpc-一道openjudge的题目问下,

问题描述 一道openjudge的题目问下, 列出完数的一个题目问下 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 1024kB 描述 自然数中,完数寥若晨星,请在从1 到某个整数范围中打印出所有的完数来.所谓"完数"是指一个数恰好等于它的所有不同因子之和.例如,6 是完数,因为6=1+2+3.而24不是完数,因为24≠ +2+3+4+6+8+12(=36). 输入 输入数据中含有一些整数n(1 输出 对于每个整数n,输出所有不大于n 的完数.每个整数n 的输出由n