首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

8皇后对角线不是有棋子//为什么0,0放一个,主对角线zxie = 3而不是2?

2013-09-06 
八皇后对角线不是有棋子//为什么0,0放一个,主对角线zxie 3而不是2??? 1 p p p//为什么0,0放一个,主对角

八皇后对角线不是有棋子//为什么0,0放一个,主对角线zxie = 3而不是2???
 1 p p p  //为什么0,0放一个,主对角线zxie = 3而不是2???
 p p p p  
 p p p p  // zxie = 3 是这一行吧???
 p p p p



#include "stdafx.h"
#include <iostream>
using namespace std;
#define MAX 15
char map[MAX][MAX];
int column[MAX];//标记:该行已经有皇后则为1,否则为0 
int zxie[MAX];//标记:该主斜线已经有皇后则为1,否则为0
int fxie[MAX];//标记:该辅斜线已经有皇后则为1,否则为0
int N;
int sum;
void output()
{
     for(int i=0;i<N;++i)
     {
       for(int j=0;j<N;++j)
          cout<<map[i][j];
       cout<<sum;
   cout<<endl;
     }
     cout<<endl;

void queue8(int row)//形式参数是row行数 
{
     for(int i=0;i<N;i++)//列 
     {
             if(column[i]==0 &&  zxie[i-row+N-1]==0 && fxie[i+row]==0)//不冲突 
             {
                      map[row][i]='@';
                      column[i]=1;    
                      zxie[i-row+N-1]=1;
                      fxie[i+row]=1;
                      if(row<(N-1))
                         queue8(row+1);
                      else
                      {
                          output();


                          sum++;
                      }
                      //回溯 
                      map[row][i]='*';
                      column[i]=0;    
                      zxie[i-row+N-1]=0;
                      fxie[i+row]=0;
             }
     }
}
int main()
{
    while(cin>>N && N!=0)
    {
         memset(map, '*', sizeof(map));
         memset(column, 0, sizeof(column));
         memset(zxie, 0, sizeof(zxie));
         memset(fxie, 0, sizeof(fxie));
         sum=0;
         queue8(0);
         cout<<"总共有"<<sum<<"种摆法。"<<endl; 
    }
    return 0;



[解决办法]
 1 p p p  //为什么0,0放一个,主对角线zxie = 3而不是2???
 p p p p  
 p p p p  // zxie = 3 是这一行吧???   <---- 坐标从0开始, 这行当然是第二行, 所以zxie=3没错
 p p p p

热点排行