在一个44的小方格(如图所示)中放置8个号,
使得每行每列放且仅放两个*号
求出所有的基本解
没有图片哦
#include<stdio.h>
void test(int n);
void print();
int count = 0;//count用来记录有多少种摆法
int col_count[4] = {0,0,0,0};//每一列星号的个数
int a[4][2];//用来记录每个星号放置的位置
char s[4][4];//数组
int main() {
test(1);
return 0;
}
void test(int n){
for(int i=0;i<4;i++){
if(col_count[i]<2){ //保证两个*
col_count[i]++;
a[n-1][0] = i; //记录这一行第一个*的位置
for(int j=i+1;j<4;j++){
if(col_count[j]<2){ //保证两个*
col_count[j]++;
a[n-1][1] = j; //记录这一行第二个*的位置
if(n<4){
test(n+1);//继续下一行
}else{
count++;
print();//输出
}
col_count[j]--;
}
}
col_count[i]--;
}
}
}
void print(){
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
s[i][j] = '0';//为了看得清楚,其余位置上放了0
}
}
for(int i=0;i<4;i++){
s[i][a[i][0]] = '*';
s[i][a[i][1]] = '*';
}
printf("第%d个\n",count);
for(int i=0;i<4;i++){
for(int j=0;j<4;j++){
printf("%c",s[i][j]);
}
printf("\n");
}
}