⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄

📁 用c++处理把皇后问题
💻
字号:
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;
bool rows[8], diag[17],diag2[17];
int result[8],total;

// 將 (r,c) 放置一個皇后
void select (int r,int c,int cnt){
 rows[r]=true;
 result[cnt]=r;
 diag[r+c]=true;
 diag2[r-c+9]=true;
}

// 取消(r,c) 放置的皇后
void unselect (int r,int c){
 rows[r]=false;
 diag[r+c]=false;
 diag2[r-c+9]=false;
}

// 判斷(row,col) 是否可以合法放置皇后
bool valid(int row,int col){
 return !(rows[row]||diag[row+col]||diag2[row-col+9]);
}

// 搜尋第 col行(column),找出合法的列rows
void dfs(int col,int cnt){
 if(cnt>=8  ){
  printf("%2d      ",total+1);

  for(int i=0;i<8;i++)
   		printf("%d",result[i]+1);
   printf("\n");

   total++;
 } else
 for(int i=0;i<8;i++)
   if(valid(i,col) ){
    select(i,col,cnt);
    dfs(col+1,cnt+1);
    unselect(i,col);
   }
}

void init(){
  total=0;
  memset(diag,0,sizeof(bool)*30);
  memset(diag2,0,sizeof(bool)*30);
  memset(rows,0,sizeof(bool)*8);
}

int main(int argc,char **argv){
  init();
 printf("SOLN       COLUMN\n");
 printf(" #      1 2 3 4 5 6 7 8\n\n");
  dfs(0,0);
 return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -