- 数独验证
- 2017-05-19 14:11:04 @
大家可以试一下
这个代码,第五个错
c++
#include<iostream>
using namespace std;
int E[20][10][10];
bool U[10][10];
bool IsWrong[21];
bool Vis[10];
bool IsRightRow(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][i][j]-1]==true)Vis[E[k][i][j]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
}
bool IsRightColumn(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
return true;
}
bool IsRightArea(int k){
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=0;j<3;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=3;j<6;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=6;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
return true;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<9;j++){
for(int k=0;k<9;k++){
cin>>E[i][j][k];
}
}
IsWrong[i]=true;
}
for(int i=0;i<n;i++){
if(IsRightRow(i)!=true)IsWrong[i]=false;
if(IsRightColumn(i)!=true)IsWrong[i]=false;
if(IsRightArea(i)!=true)IsWrong[i]=false;
}
for(int i=0;i<n;i++){
if(IsWrong[i]!=false){
cout<<"Right"<<endl;
}
else cout<<"Wrong"<<endl;
}
}
这个代码,还是第五个错:
#include<iostream>
using namespace std;
int E[20][10][10];
bool U[10][10];
bool IsWrong[21];
bool Vis[10];
bool IsRightRow(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][i][j]-1]==true)Vis[E[k][i][j]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
}
bool IsRightColumn(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
return true;
}
bool IsRightArea(int k){
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=0;j<3;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=3;j<6;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=6;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
return true;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<9;j++){
for(int k=0;k<9;k++){
cin>>E[i][j][k];
}
}
IsWrong[i]=true;
}
for(int i=0;i<n;i++){
if(IsRightRow(i)!=true)IsWrong[i]=false;
if(IsRightArea(i)!=true)IsWrong[i]=false;
}
for(int i=0;i<n;i++){
if(IsWrong[i]!=false){
cout<<"Right"<<endl;
}
else cout<<"Wrong"<<endl;
}
}
甚至把行列验证都去掉,还是第五个错:
#include<iostream>
using namespace std;
int E[20][10][10];
bool U[10][10];
bool IsWrong[21];
bool Vis[10];
bool IsRightRow(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][i][j]-1]==true)Vis[E[k][i][j]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
}
bool IsRightColumn(int k){
for(int i=0;i<9;i++){
for(int j=0;j<9;j++)Vis[i]=true;
for(int j=0;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
}
}
for(int i=0;i<9;i++){
if(Vis[i]==false);
else return false;
}
return true;
return true;
}
bool IsRightArea(int k){
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=0;j<3;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=3;j<6;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
for(int i=0;i<9;i+=3){
for(int j=0;j<9;j++)Vis[j]=true;
for(int j=6;j<9;j++){
if(Vis[E[k][j][i]-1]==true)Vis[E[k][j][i]-1]=false;
if(Vis[E[k][j][i+1]-1]==true)Vis[E[k][j][i+1]-1]=false;
if(Vis[E[k][j][i+2]-1]==true)Vis[E[k][j][i+2]-1]=false;
}
for(int j=0;j<9;j++)if(Vis[j]==true)return false;
}
return true;
}
int main(){
int n;
cin>>n;
for(int i=0;i<n;i++){
for(int j=0;j<9;j++){
for(int k=0;k<9;k++){
cin>>E[i][j][k];
}
}
IsWrong[i]=true;
}
for(int i=0;i<n;i++){
if(IsRightArea(i)!=true)IsWrong[i]=false;
}
for(int i=0;i<n;i++){
if(IsWrong[i]!=false){
cout<<"Right"<<endl;
}
else cout<<"Wrong"<<endl;
}
}