| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:花了几个小时,思路一直都很清晰,想不明白错在哪里....最后才发现,是初始化输入出问题了...In Reply To:花了几个小时,思路一直都很清晰,想不明白错在哪里....最后才发现,是初始化输入出问题了... Posted by:inowfordream at 2009-07-28 16:17:14 #include <iostream>
#include <string>
#define MAXN 9
using namespace std;
int map[MAXN][MAXN];
bool col[MAXN][MAXN], row[MAXN][MAXN], block[MAXN][MAXN];
int C;
bool Fill(int n, int m, int num)
{
int b_col = m / 3 * 3, b_row = n / 3 * 3, b_num = b_row / 3 * 3 + b_col / 3;
if (block[b_num][num] || row[n][num] || col[m][num]) return false;
map[n][m] = num;
block[b_num][num] = row[n][num] = col[m][num] = true;
return true;
}
void Undo(int n, int m, int num)
{
int b_col = m / 3 * 3, b_row = n / 3 * 3, b_num = b_row / 3 * 3 + b_col / 3;
block[b_num][num] = row[n][num] = col[m][num] = false;
map[n][m] = 0;
}
bool Full()
{
for (int i = 0; i < MAXN; i++)
for (int j = 0; j < MAXN; j++)
if (map[i][j] == 0) return false;
return true;
}
void Print()
{
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++)
cout << map[i][j];
cout << "\n";
}
}
void DFS(int n, int m)
{
if (m < 0) { n -= 1; m = 8; }
if (Full() || n < 0) {
if (C == 0) Print();
C++;
return;
}
if (map[n][m] != 0) {
DFS(n, m - 1);
} else {
for (int k = 1; k <= 9; k++)
if (Fill(n, m, k)) {
DFS(n, m - 1);
Undo(n, m, k);
}
}
}
void Solve()
{
char tmp;
string s;
for (int i = 0; i < MAXN; i++) {
for (int j = 0; j < MAXN; j++) {
map[i][j] = 0;
col[i][j] = false;
row[i][j] = false;
row[i][j] = false;
}
}
for (int i = 0; i < MAXN; i++) {
cin >> s;
for (int j = 0; j < s.length(); j++) {
if (s[j] != '0') Fill(i, j, s[j] - '0');
}
}
C = 0;
DFS(8, 8);
}
int main()
{
int T;
ios::sync_with_stdio(false);
cin >> T;
for (int i = 0; i < T; i++) Solve();
return 0;
}
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator