迴圈
輸入數獨
判別 列 行 區塊 是否有重複出現
有
輸出no
沒有
輸出yes
#include <iostream>
#include <cstring>
using namespace std;
void setSudo();
bool check(int number, char type);
int sudo[9][9];
bool bcheck[9];
int main()
{
int i;
while(cin >> sudo[0][0])
{
setSudo();
for(i = 0; i<9; i++)
if(!check(i, 'r') || !check(i, 'c') || !check(i, 's'))
break;
i >= 9 ? cout << "yes\n" : cout << "no\n";
}
return 0;
}
void setSudo()
{
for(int i = 1; i<9; i++)
cin >> sudo[0][i];
for(int i = 1; i<9; i++)
for(int j = 0; j<9; j++)
cin >> sudo[i][j];
}
bool check(int number, char type)
{
int i, j;
memset(bcheck, true, 9);
switch(type)
{
//row
case 'r':
for( i = 0; i<9; i++)
if(bcheck[sudo[number][i] - 1])
bcheck[sudo[number][i] - 1] = false;
else
return false;
return true;
//col
case 'c':
for(i = 0; i<9; i++)
if(bcheck[sudo[i][number] - 1])
bcheck[sudo[i][number] - 1] = false;
else
return false;
return true;
//square
case 's':
if(number < 3)
{
i = 0;
j = number*3;
}
else if(number < 6)
{
i = 3;
j = (number - 3)*3;
}
else
{
i = 6;
j = (number - 6)*3;
}
for(int I = i+3; i<I; i++)
for(int J = j; J<j+3; J++)
if(bcheck[sudo[i][J]-1])
bcheck[sudo[i][J]-1] = false;
else
return false;
return true;
default:
return false;
}
}
留言列表