设为首页 加入收藏

TOP

hdu1426 深搜水题
2015-07-20 17:35:36 来源: 作者: 【 】 浏览:2
Tags:hdu1426 水题

简单深搜 关键是输入格式问题


#include
#include
#include
using namespace std;


int line[15][15],row[15][15],mark[5][5][15],map[15][15],num;
int leap[100][3];
int dfs(int t)
{
int i;
int a=leap[t][1],b=leap[t][2];
for(i=1;i<=9;i++)
{
if(line[a][i]||row[b][i]||mark[a/3][b/3][i]) continue;
//printf("####\n");
line[a][i]=row[b][i]=mark[a/3][b/3][i]=1;
map[a][b]=i;
if(t==num)
{
return 1;
}
if(!dfs(t+1))
{line[a][i]=row[b][i]=mark[a/3][b/3][i]=0;
map[a][b]=0;}
else return 1;
}
return 0;
}
int main()
{
int a,i,j,d=1;
char p,str[5];
while(~scanf("%s",str))//注意这个输入格式 用%c容易出错
{
memset(mark,0,sizeof(mark));//标记小正方形是否出现过这个数
memset(line,0,sizeof(line));//标记每一行是否出现过这个数
memset(row,0,sizeof(row));//每一列
memset(map,0,sizeof(map));//宫格
int t=0;
num=0;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(!(i==0&&j==0)) scanf("%s",str);
p=str[0];
if(p>='1'&&p<='9')
{
map[i][j]=p-'0';
line[i][p-'0']=1;
row[j][p-'0']=1;
mark[i/3][j/3][p-'0']=1;
}
else
{
leap[++t][1]=i;//把所有需要填的数的横纵坐标存在leap数组里
leap[t][2]=j;
num++;
}
}
}
dfs(1);//深搜所有需要填的数
if(d!=1) printf("\n");
d++;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(j!=0) printf(" ");
printf("%d",map[i][j]);
}
printf("\n");
}
}
return 0;
}

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 3037 Saving Beans 大组合数 .. 下一篇可视化工具solo show-----Process..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·有没有适合新手练习 (2025-12-26 01:48:47)
·用清华镜像网怎么下 (2025-12-26 01:48:44)
·请比较Python和R语言 (2025-12-26 01:48:42)
·JAVA现在的就业环境 (2025-12-26 01:19:24)
·最好的java反编译工 (2025-12-26 01:19:21)