#include<bits/stdc++.h>
using namespace std;
int a[12] = {0,0,0,0,0,0,0,1,1,1,1,1};
int ans,mmap[3][4],flag;
set<string> state;
void dfs(int y,int x){
if(mmap[y][x] == 0) return;
mmap[y][x] = 0;
int newy = y+1;
if(newy>=0&&newy<=2){
dfs(newy,x);
}
int newx = x+1;
if(newx>=0&&newx<=3){
dfs(y,newx);
}
newy = y-1;
if(newy>=0&&newy<=2){
dfs(newy,x);
}
newx = x-1;
if(newx>=0&&newx<=3){
dfs(y,newx);
}
flag = 1;
}
bool check(){
int i,j;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
mmap[i][j] = a[i*4+j];
}
}
int cnt = 0;
for(i=0;i<3;i++){
for(j=0;j<4;j++){
if(mmap[i][j] == 1){
dfs(i,j);
cnt++;
}
}
}
return cnt==1;
}
/*void f(int k){
if(k==12){
flag=0;
if(check()){
ans++;
}
return;
}
int i;
for(i=k; i<12; i++){
int t = a[k];
a[k] = a[i];
a[i] = t;
f(k+1);
t = a[k];
a[k] = a[i];
a[i] = t;
}
}*/
int main(){
//f(0);
do{
if(check()){
ans++;
}
}while(next_permutation(a,a+12));
printf("%d",ans);
return 0;
}
2016年蓝桥杯B组第七题
最新推荐文章于 2024-05-12 15:39:48 发布
这段代码展示了如何利用深度优先搜索(DFS)算法检查3x4矩阵中是否存在唯一的一个1,其余为0的情况。通过递归遍历矩阵的相邻元素,确保只有一个1并返回结果。在主函数中,通过全排列所有可能的12位二进制数来找到满足条件的矩阵组合。
1673

被折叠的 条评论
为什么被折叠?



