POJ-dfs-2676-Sudoku
2016-10-24 12:49
405 查看
题意:
数独游戏。
思路:
在每次分割区域后,查询是否满足要求。
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int row[15][15];
int col[15][15];
int some[15][15];
char save[15][15];
int mp[15][15];
int over;
void Prin()
{
for(int i=1;i<=9;i++)
{
for(int j=1; j<=9; j++)
printf("%d",mp[i][j] );
printf("\n");
}
}
void dfs(int x,int y)
{
if(x==10)
{
Prin();
over=1;
return ;
}
if(over)
return ;
if(mp[x][y])
{
if(y==9)
dfs(x+1,1);
else
dfs(x,y+1);
}
else
{
int op=3*((x-1)/3)+(y-1)/3+1;
for(int i=1;i<=9;i++)
{
if(row[x][i]!=0||col[y][i]!=0||some[op][i]!=0)
continue;
mp[x][y]=i;
row[x][i]=1;
col[y][i]=1;
some[op][i]=1;
if(y==9)
dfs(x+1,1);
else
dfs(x,y+1);
mp[x][y]=0;
row[x][i]=0;
col[y][i]=0;
some[op][i]=0;
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
memset(some,0,sizeof(some));
over=0;
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
cin>>save[i][j];
mp[i][j]=save[i][j]-'0';
if(mp[i][j])
{
int op=3*((i-1)/3)+(j-1)/3+1;
row[i][mp[i][j]]=1;
col[j][mp[i][j]]=1;
some[op][mp[i][j]]=1;
}
}
dfs(1,1);
}
return 0;
}
数独游戏。
思路:
在每次分割区域后,查询是否满足要求。
#include <iostream>
#include <stdio.h>
#include <cstring>
using namespace std;
int row[15][15];
int col[15][15];
int some[15][15];
char save[15][15];
int mp[15][15];
int over;
void Prin()
{
for(int i=1;i<=9;i++)
{
for(int j=1; j<=9; j++)
printf("%d",mp[i][j] );
printf("\n");
}
}
void dfs(int x,int y)
{
if(x==10)
{
Prin();
over=1;
return ;
}
if(over)
return ;
if(mp[x][y])
{
if(y==9)
dfs(x+1,1);
else
dfs(x,y+1);
}
else
{
int op=3*((x-1)/3)+(y-1)/3+1;
for(int i=1;i<=9;i++)
{
if(row[x][i]!=0||col[y][i]!=0||some[op][i]!=0)
continue;
mp[x][y]=i;
row[x][i]=1;
col[y][i]=1;
some[op][i]=1;
if(y==9)
dfs(x+1,1);
else
dfs(x,y+1);
mp[x][y]=0;
row[x][i]=0;
col[y][i]=0;
some[op][i]=0;
}
}
}
int main()
{
int T;
cin>>T;
while(T--)
{
memset(row,0,sizeof(row));
memset(col,0,sizeof(col));
memset(some,0,sizeof(some));
over=0;
for(int i=1;i<=9;i++)
for(int j=1;j<=9;j++)
{
cin>>save[i][j];
mp[i][j]=save[i][j]-'0';
if(mp[i][j])
{
int op=3*((i-1)/3)+(j-1)/3+1;
row[i][mp[i][j]]=1;
col[j][mp[i][j]]=1;
some[op][mp[i][j]]=1;
}
}
dfs(1,1);
}
return 0;
}
相关文章推荐
- POJ 2676-Sudoku(DFS)
- POJ 2676 sudoku dfs
- POJ 2676-Sudoku(DFS-数独)
- poj dfs之2676 Sudoku
- [DFS]poj 2676 Sudoku 数独问题
- POJ 2676 Sudoku(DFS回溯)
- DFS POJ 2676 Sudoku
- POJ-2676 Sudoku(DFS)
- POJ 2676 Sudoku (DFS回溯剪枝)
- POJ 2676 Sudoku 【dfs】
- POJ 2676 Sudoku (数独 DFS)
- Poj 2676 Sudoku[dfs]
- POJ 2676 Sudoku(经典DFS)
- poj 2676 Sudoku (dfs)
- POJ 2676 Sudoku (数独求解器 DFS)
- POJ 2676 SuDoKu DFS
- poj 2676 Sudoku (dfs)
- poj 2676Sudoku(DFS+回溯)
- [poj 2676] Sudoku DFS
- poj--2676 Sudoku(dfs)