您的位置:首页 > 编程语言 > C语言/C++

八皇后问题(算法)C++源代码

2015-01-30 19:19 274 查看
//八皇后问题,采用深度优先的算法 时间 2014-3-24

#include

using namespace std;

int num; //八皇后解的个数

int n;  
 //判断宫格大小

char p;//控制是否输出所有结果

int mg[100][100];

typedef struct  
   
 //堆栈中存放皇后所在位置的结构

{

    int x;

    int y;

}Point;

typedef struct  
   
 //定义堆栈,存放皇后数据

{

    Point
data[50];

    int
top;

}Que;

//judge()功能:判断所放皇后的位置是否合理。合理返回值为true,否则为false

//judge()算法:通过所在点的位置分别从该列,该左上斜线,该右上斜线

//  
   
   
   
  找出是否存在皇后,并判断合理性

bool judge(int x,int y)  

{

    int
i,j;

    j=y;

  
 for(i=0;i

    {

  
   
 if(i==x)

  
   
   
 continue;

  
   
 if(mg[i][j]==1)

  
   
   
 return false;

    }

  
 i=x,j=y;

  
 while(i!=0&&j!=0)

    {

  
   
 i--;j--;

  
   
 if(mg[i][j]==1)

  
   
   
 return false;

    }

  
 i=x;j=y;

  
 while(i!=0&&j!=n-1)

    {

  
   
 i--;j++;

  
   
 if(mg[i][j]==1)

  
   
   
 return false;

    }

    return
true;

}

//print()功能:输出解的个数。

void print(Que &Q)

{

  
 cout<<"解的个数为:";

  
 cout<<num<<endl;

  
 system("pause");

}

//输出所有的解

void print2()

{

    int
i,j;

  
 for(i=0;i

    {

  
   
 for(j=0;j

  
   
 {

  
   
   
 cout<<mg[i][j]<<" ";

  
   
 }

  
   
 cout<<endl;

    }

}

//Pro()功能:判断合理皇后的位置并存入堆栈,如果问题无解返回值为false,否则为true

//Pro()算法:

//   
1.从方格(0,0)位置开始放入皇后

//   
2.增加行数比如从(1,0)放入皇后,如果合理增加行数,否则增加列数

//   
3.如果列数一直到宫格最后一列也不合理,返回上一行,对上一行皇后列数加1,重复步骤2,3

//   
4.如果在最后一行找到合理皇后的位置,程序有解,num+1,重复步骤3。

bool Pro()

{

    Que
Huang;

  
 Huang.top=-1;

    bool
find;

  
 find=false;

    int
i=1,j,k=0;

  
 Huang.top++;  
//将(0,0)放入皇后并压入堆栈

  
 Huang.data[0].x=1;

  
 Huang.data[0].y=1;

  
 mg[0][0]=1;

  
 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: