明天就考蓝桥杯了 菜鸡的我 写了一到 之前的真题
希望咸鱼也能翻身。
方格填数
如下的10个格子
我是一行一行的搜索, 在选择一行中的一列。
dis[] 的四个方向是 与现在位置相邻 且 已经确定的位置。
我想其实也可以将各个位置的限制条件列出来 然后用next_permutation 全排列 一个数组 ,满足条件的就加加。
不写那么多了 显得自己很菜,
咸鱼翻身 咸鱼翻身 咸鱼翻身
以后就主要弄操作系统的学习了。
#include<stdio.h>
#include<stdlib.h>
int map[3][4];
int vis[3][4];
int book[10];
int dis[4][2]={ 0,-1, -1,-1, -1,0, -1,1 };
int k;
int ans;
int is_ok(int x, int y, int j){
for( int i=0; i<4; ++i )
{
int dx=x+dis[i][0];
int dy=y+dis[i][1];
if( dx <0 || dx>=3 || dy<0 || dy>=4 )
continue;
if( vis[dx][dy]==-1 )
continue;
if( abs(map[dx][dy]-j) == 1 )
return 0;
}
return 1;
}
void dfs( int cur, int y, int step ){
int i,j;
if( step==10 )
{
ans++;
return ;
}
if( y>=4 )
{
y=0;
cur=cur+1;
}
for( j=0; j<=9; ++j )
{
if( book[j]==0 && is_ok(cur,y,j) )
{
vis[cur][y]=1;
map[cur][y]=j;
book[j]=1;
dfs(cur,y+1,step+1);
book[j]=0;
vis[cur][y]=0;
}
}
}
int main(){
int i,j;
vis[0][0]=-1;
//vis[2][3]=-1;
ans=0;
dfs(0,1,0);
printf("%d\n",ans);
return 0;
}
(如果显示有问题,也可以参看【图1.jpg】)
填入0~9的数字。要求:连续的两个数字不能相邻。
(左右、上下、对角都算相邻)
一共有多少种可能的填数方案?
请填写表示方案数目的整数。
注意:你提交的应该是一个整数,不要填写任何多余的内容或说明性文字。