精华内容
下载资源
问答
  • C语言 8皇后解法

    2017-07-25 18:04:51
    //这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了 #include   #define MAX 200 #define Empty 0 #define Full 1 #define N 8 unsigned char ...
    //这个问题的原理是,在一个四成四的表格中,顺序去放皇后,一个一个格子去试,每种情况都走一遍,结果就出来了

    #include
     
    #define MAX 200
    #define Empty 0
    #define Full 1
    #define N 8
    unsigned char qipan[N][N][N]={MAX};//初始化8张棋盘表示每下一步的
    void input(int i);
    int count = 0;
    int main()
    {
       input(0);
       getchar();
        return0;
    }
    void input(int i)
    {
        intx=0,y=0;
        intp=0,q=0;
        int flag =0;
       //初始化当前棋盘
       if(i!=0)
        {
           for(x=0;x
           {
               for(y=0;y
               {
                   qipan[i][x][y] = qipan[i-1][x][y];
               }
           }
        }
        else
        {
           for(x=0;x
           {
               for(y=0;y
               {
                   qipan[i][x][y] = MAX;
               }
           }
        }
        //递归结束
       if(i==N)
        {
           count++;
           for(x=0;x
           {
               for(y=0;y
               {
                   printf("%d ",qipan[i-1][x][y]);
               }
               printf("\n");
           }
           printf("%d\n",count);
           return;
        }
    
       for(y=0;y
        {
           //找到空位
           if(qipan[i][i][y]==MAX)
           {
               //另其为1
               qipan[i][i][y] = 1;
               //前后左右上下都置为0
               for(p=0;p
               {
                   for(q=0;q
                   {
                       if(q==y||p==i||(p-i)==(q-y)||(p-i)==(y-q))
                           if(qipan[i][p][q] == MAX)
                               qipan[i][p][q] = 0;
                   }
               }
               if(flag != -1)
               {
                   //找下一个
                   input(i+1);
               }
               //将棋盘变回本层原样
               for(p=0;p
               {
                   for(q=0;q
                   {
                       if(i!=0)
                       qipan[i][p][q] = qipan[i-1][p][q];
                       else
                       qipan[i][p][q] = MAX;
                   }
               }
               flag =0;
           }
        }
       //找不到空位结束
       return;
    }


    展开全文
  • C语言8皇后问题

    2014-03-27 21:15:41
    算法实验8皇后问题,可运行无问题
  • C语言 8皇后问题

    2017-10-31 21:51:46
    8皇后问题 时限:1000ms 内存限制:10000K 总时限:3000ms 描述: 输出8皇后问题所有结果。 输入: 没有输入。 输出: 每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8...

    8皇后问题

    时限:1000ms 内存限制:10000K 总时限:3000ms

    描述:

    输出8皇后问题所有结果。

    输入:

    没有输入。

    输出:

    每个结果第一行是No n:的形式,n表示输出的是第几个结果;下面8行,每行8个字符,‘A’表示皇后,‘.’表示空格。不同的结果中,先输出第一个皇后位置靠前的结果;第一个皇后位置相同,先输出第二个皇后位置靠前的结果;依次类推。

    输入样例:

    输出样例:

    输出的前几行: No 1: A....... ....A... .......A .....A.. ..A..... ......A. .A...... ...A.... No 2: A....... .....A.. .......A ..A..... ......A. ...A.... .A...... ....A...

    #include<stdio.h> #include<math.h> int a[8],n=1; void search(int m); void output(int s[8]); int panduan(int m,int n); int main() { search(0); return 0; } void search(int m) { int i,row,col,flag; if(m==8) { output(a); } else for(i=0;i<8;i++) { a[m]=i; flag=panduan(m,i); if(flag==1) { search(m+1); } } } int panduan(int row,int col) { int i,flag=1; for(i=0;i<row;i++) { if(a[i]==col||row-i==abs(col-a[i])) { flag=0; break; } } return flag; } void output(int s[8]) { int i,j; printf("No %d:\n",n); for(i=0;i<8;i++) { for(j=0;j<8;j++) { if(j==s[i])printf("A"); else printf("."); if(j==7)printf("\n"); } } n++; }

    展开全文
  • //// main.cpp// EightQueens//// Created by liujan on 10/24/14.// Copyright (c) 2014 liujan. All rights reserved.//#include #include "stack"using namespace std;bool isvisited[30][30];int Count = 0;...

    //

    // main.cpp

    // EightQueens

    //

    // Created by liujan on 10/24/14.

    // Copyright (c) 2014 liujan. All rights reserved.

    //

    #include

    #include "stack"

    using namespace std;

    bool isvisited[30][30];

    int Count = 0;

    int n;

    //判断是否可以从当前位置移动到x,y这个位置

    bool canMove(int x, int y){

    if (isvisited[x][y])

    return false;

    for (int i = 0; i < n; i++){

    for (int j = 0; j < n; j++){

    if (isvisited[i][j] && abs(x-i) == abs(y-j)) //对角线或已经访问过

    return false;

    else if(isvisited[x][j]) { //相同行

    return false;

    }

    else if (isvisited[i][y]) //相同列

    return false;

    }

    }

    return true;

    }

    //移动到下一位置

    bool moveQueens(int x, int y){

    if (Count == n){ //走完最后一个节点,则输出结果

    for (int i = 0; i < n; i++){

    for (int j = 0; j < n; j++) {

    if (isvisited[i][j])

    cout << 1 << " ";

    else

    cout << 0 << " ";

    }

    cout << endl;

    }

    cout << endl;

    return true;

    }

    else {

    for (int i = y; i < n; i++){

    if (canMove(x, i)){

    isvisited[x][i] = true;

    Count ++;

    moveQueens(x+1, 0);

    isvisited[x][i] = false; //回溯

    Count --;

    }

    }

    return false;

    }

    }

    int main(int argc, const char * argv[]) {

    while(cin >> n){

    if (n <= 0 )

    continue;

    // insert code here...

    for (int i = 0; i < n; i++)

    for (int j = 0; j < n; j++)

    isvisited[i][j] = false;

    Count = 0;

    moveQueens(0,0);

    }

    return 0;

    }

    标签:

    版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com

    特别注意:本站所有转载文章言论不代表本站观点!

    本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

    展开全文
  • C语言皇后问题

    2015-07-27 14:14:40
    C语言皇后问题
  • C语言n皇后

    2017-06-28 01:42:29
    c语言
  • c语言皇后问题

    2018-01-12 23:45:57
    c语言实现5皇后问题,控制台画出5个皇后控制全局,互不相吃的全部摆法
  • C语言皇后 99

    2011-12-14 19:40:47
    99种可能全显示的c语言皇后问题,数据结构作业
  • C语言皇后

    2014-02-05 20:16:04
    就是试着上传一下,八皇后问题的C语言代码~
  • c语言算法8皇后

    2013-10-12 09:26:57
    c语言穷举法经典案例之一,要求将8皇后摆放在棋盘上,在其同一行同一列和对角线上都没有其他皇后
  • C语言皇后问题

    2013-03-19 13:26:54
    使用C语言解决八皇后问题。使用回溯法。方便学习,了解回溯法。
  • c语言皇后

    2012-12-24 19:36:06
    这是我自己写的八皇后,可以输出全部的解,使用c语言编的,使用回缩算法
  • C语言实现 8皇后问题

    2011-06-20 14:45:39
    C语言实现8皇后问题 解出其所有的解
  • C语言求解出八皇后所有解,稍作修改可以推至n皇后问题
  • C语言皇后源代码

    2012-05-29 11:16:37
    这是用c语言写的八皇后代码,里面增加了计时功能,可以直接运行使用
  • 主要介绍了C语言皇后问题解决方法,简单描述了八皇后问题并结合实例形式分析了C语言基于暴力法与回溯法解决八皇后的具体操作技巧,需要的朋友可以参考下
  • C语言皇后算法

    2018-02-19 18:41:48
    今天通过网上学习C语言 了解八皇后算法:满足八皇后的条件就是 在8x8的棋局中 要摆放8皇后 使他们不能在同一行同一列和同一条对角线 求出所有的解法具体代码如下:#in return 0;#include&lt;stdio.h&gt; ...

    今天通过网上学习C语言 了解八皇后算法:

    满足八皇后的条件就是 在8x8的棋局中 要摆放8个皇后 使他们不能在同一行同一列和同一条对角线 求出所有的解法

    具体代码如下:

    #in
    	return 0;#include<stdio.h>
    int count=0;//全局变量 
    int notDanger(int row,int j,int (*chess)[8])
    {
    	int i,k,flag1=0,flag2=0,flag3=0,flag4=0,flag5=0;
    	//判断列方向 
    	for(i=0;i<8;i++)
        {
        	if(*(*(chess+i)+j)!=0)
            {
            	flag1=1;
            	break;
    		}
    	}
    	//判断对角线 需要判断4个方位 
    	//判断左上方
    	for(i=row,k=j;i>=0&&k>=0;i--,k--)
    	{
    		if(*(*(chess+i)+k)!=0)
    		{
    			flag2=1;
    			break;
    		}
    		 //判断右下方
    	 for(i=row,k=j;i<8&&k<8;i++,k++)
    	{
    		if(*(*(chess+i)+k)!=0)
    		{
    			flag3=1;
    			break;
    		}
    		 //判断左下方 
    	  for(i=row,k=j;i<8&&k>=0;i++,k--)
    	{
    		if(*(*(chess+i)+k)!=0)
    		{
    			flag4=1;
    			break;
    		}
    		  //判断右上方 
    	  for(i=row,k=j;i>=0&&k<8;i--,k++)
    	{
    		if(*(*(chess+i)+k)!=0)
    		{
    			flag5=1;
    			break;
    		}
    		 
      if(flag1 || flag2 || flag3 ||flag4 || flag5)
      {
      	return 0;
      }
      else
      {
         return 1;	
       }	  
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
       void  EightQueen(int row,int n,int (*chess)[8]) //row 起始行 参数n表示列数 参数 (*chess)[0] 表示指向棋盘每一行的指针 
    {
    	int chess2[8][8],i,j;
    	for(i=0;i<8;i++)
    	{
    	    for(j=0;j<8;j++)
    	    {
    	    	chess2[i][j]=chess[i][j];
    		}
    	}
    	if(8 == row)
    	{
    		printf("第%d种\n",count+1);
    		for(i=0;i<8;i++)
    		{
    			for(j=0;j<8;j++)
    			{
    				printf("%d ",*(*(chess2+i)+j)); 
    			}
    			printf("\n");
    			
    		}
    		printf("\n");
    		count++;
    		else
    	{
    		//判断这个位置是否有危险
    		//如果没有危险?继续往下 
    	      for(j=0;j<n;j++)
    	   {
    		if( notDanger(row,j,chess)) //判断是否危险 
    		{
    			for(i=0;i<8;i++)
    			{
    				*(*(chess2+row)+i)=0;   //先假设整行都危险 全部赋值为0 
    						 *(*(chess2+row)+j)=1;      // (row,j)为皇后位置,位置赋值为1 
    			 EightQueen(row+1,n,chess2); //继续往下一行进行测试 
    		}
    	   }
    	}
    }
    
    
    int main()
    {
    	int chess[8][8],i,j;
    	for(i=0;i<8;i++)
    	{
    		for(j=0;j<8;j++)
    		{
    			chess[i][j]=0;
    		}
    	}
    	EightQueen(0,8,chess);
    	printf("总共有%d种解决方法!\n\n",count); 
    	return 0;
    }
    }

    展开全文
  • C语言 2n皇后问题

    2020-07-26 09:28:25
    n小于等于8。   输入格式  输入的第一行为一个整数n,表示棋盘的大小。  接下来n行,每行n个0或1的整数,如果一个整数为1,表示对应的位置可以放皇后,如果一个整数为0,表示对应的位置不可以放皇后。   输出...
  • C语言进行八皇后这个古老而复杂的问题的实现
  • c语言解决8皇后问题

    2021-02-22 12:57:34
    8){ //8皇后都放置完毕 sum++; printf("第%d种:",sum); for(i=0;i<8;i++){ printf("(%d,%d) ",take[i][0],take[i][1]); } printf("\n"); //输出 } ...
  • C语言皇后问题 棋盘是8*8的,所以定义一个8的宏,方便后面的使用,如果以后更改棋盘大小,也只需要更改宏定义就好了,很方便。代码如下: #define WIDTH 8 定义一个8*8(棋盘大小为8),值全为0的二维数组,,...
  • 8皇后问题 C语言 递归

    2009-08-04 15:06:01
    8皇后 8queens C语言 递归 8皇后 8queens C语言 递归
  • C语言皇后冲突问题

    2017-10-24 22:24:40
    皇后问题是在8*8的国际象棋的棋盘上放置8皇后,有多少种不同的放置方法,要求它们互相都不冲突(冲突是指在某一行或者某一列或者某一条斜线上出现两个皇后,因为这两个皇后可以互相吃掉对方)。其中行号和列号都...
  • c语言皇后问题

    千次阅读 2016-12-05 03:06:30
    皇后问题就是在8*8的棋盘上的每一行都放置一个皇后,使他们无法进行互相攻击 思路: 1.编写一个函数,将一个皇后放在第一列,如果存在攻击就把皇后放在第二列,如果每列都存在互相攻击的情况,则这个函数返回 2....
  • 8 X 8 方格的棋盘中 ,每一行 中 有一个皇后旗子, 该旗子的 横、竖、左倾斜、右倾斜的位置都是不能存在其他的旗子, 问有多少种摆法? 百度百科介绍 解决的思路 1.固定到一行,依次选择下一列 2. 当选择...
  • C语言 N皇后问题

    2019-09-20 02:23:10
    /* *author:wxg */ #include<stdio.h> #include<string.h> #defineN8 /* *flag=1代表可以放,flag=-1代表不可以放 */ intisOK(inta[N][N],intn,in...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,071
精华内容 1,228
关键字:

c语言8皇后

c语言 订阅