#include <iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int W=4,H=4,N=2; //W为横着的条数
char a[W][H]={
{'.','.','.','#'},
{'.','.','#','.'},
{'.','#','.','.'},
{'#','.','.','.'}
};
int row[W]={0}; //辅助变量思想 - 占位变量
int line[H]={0};
int t=0;
void put(int n,int y){ //以整列H进行为主元移动 -> 每行W用for循环
if(n==0){
t++; //到达目标 BYEBYE了
return;
}else if(y == H){
return;
}
for(int i=W-1;i>=0;i--){ //下->上
if(!row[i] && a[i][y]=='#'){
row[i] = 1;
if(y+1<=H)put(n-1,y+1);
row[i] = 0; //回溯恢复
}
}
if(y+1<H)put(n,y+1); //本列不放->直捣黄龙
}
int main()
{
put(N,0); //初始位置设为第一列 -> 有序化思想
cout << t;
return 0;
}
//cout << "输入:"
练习6 - 棋盘问题
最新推荐文章于 2021-04-03 15:04:47 发布