码迷,mamicode.com
首页 > 其他好文 > 详细

poj 2918 Tudoku 数独dfs

时间:2015-03-09 20:55:37      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:poj   算法   

题意:

解数独游戏。

分析:

这道数独的数独直接dfs就能过。

代码:

//poj 2918
//sep9
#include<iostream>
using namespace std;
char s[12][12];
int board[12][12];
int CheckSquare[12][12];
int CheckRow[12][12];
int CheckColumn[12][12];
int ok;

int GetSquareId(int i,int j)
{
	int r=i/3;
	int c=j/3;
	return r*3+c;	
}

int check()
{
	int i,j;
	for(i=0;i<9;++i)
		for(j=0;j<9;++j)
		{
			if(CheckRow[i][j]==0||CheckColumn[i][j]==0||CheckSquare[i][j]==0)
				return 0;
		}
	ok=1;
	return 1;
}

void dfs(int i,int j)
{
	if(ok==1)
		return;
	if(board[i][j]!=0)
	{
		if(j<8)
			dfs(i,j+1);
		else
		{
			if(i<8)
				dfs(i+1,0);	
			else
				check();
		}	
	}
	else
	{
		int x,ids=GetSquareId(i,j);
		for(x=1;x<=9;++x)
		{
			if(CheckRow[i][x]==0&&CheckColumn[j][x]==0&&CheckSquare[ids][x]==0)
			{
				board[i][j]=x;
				CheckRow[i][x]=1;
				CheckColumn[j][x]=1;	
				CheckSquare[ids][x]=1;
				if(j<8)
					dfs(i,j+1);
				else
				{
					if(i<8)
						dfs(i+1,0);	
					else
						check();
				}
				if(ok==1)
					return ;
				CheckRow[i][x]=0;
				CheckColumn[j][x]=0;	
				CheckSquare[ids][x]=0;					
			}
		}
		board[i][j]=0;
	}
}
int main()
{
	int cs,t=0;
	scanf("%d",&cs);
	while(cs--)
	{
		int i,j;
		memset(CheckColumn,0,sizeof(CheckColumn));
		memset(CheckRow,0,sizeof(CheckRow));
		memset(CheckSquare,0,sizeof(CheckSquare));
		for(i=0;i<9;++i)
			scanf("%s",s[i]);
		for(i=0;i<9;++i)
			for(j=0;j<9;++j)
			{
				board[i][j]=s[i][j]-'0';
				int x=board[i][j];
				CheckRow[i][x]=1;
				CheckColumn[j][x]=1;
				int ids=GetSquareId(i,j);
				CheckSquare[ids][x]=1;
			}
		ok=0;		
		dfs(0,0);
		printf("Scenario #%d:\n",++t);
		for(i=0;i<9;++i)
		{
			for(j=0;j<9;++j)
				printf("%d",board[i][j]);
			printf("\n");
		}
		printf("\n");
	}
	return 0;	
}


poj 2918 Tudoku 数独dfs

标签:poj   算法   

原文地址:http://blog.csdn.net/sepnine/article/details/44159575

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!