XDOJ 1035: 数独

题解:超级大水题,就是判断行列上是否都是1-9个不同数字组成,AC过了,但是跑的有点慢,水题都这么慢,我太菜了,2333333
#include<iostream>
#include<algorithm>
#include<queue>
#include<stack>
#include<map>
#include<set>
#include<vector>
#include<cstring>
using namespace std;
int main(){
	int m;
	int a[10][10],b[10][10],c[10][10],d[10],e[10];
	while(cin>>m){
		for(int i=1;i<=m;i++){
		memset(b,0,sizeof(b));
		memset(c,0,sizeof(c));
		memset(d,0,sizeof(d));
		memset(e,0,sizeof(e));
		memset(a,0,sizeof(a));
			for(int j=1;j<=9;j++){
				for(int k=1;k<=9;k++){
					cin>>a[j][k];
				}
			}
			for(int j=1;j<=9;j++){
				for(int k=1;k<=9;k++){
					if(a[j][k]<=9&&a[j][k]>=1){
						b[j][a[j][k]]=1;
						c[a[k][j]][j]=1;
				//		cout<<a[k][j]<<"  "<<j<<endl;
					}
				}
			}
			for(int j=1;j<=9;j++){
				int sum=0;
				int ans=0;
				for(int k=1;k<=9;k++){
					sum+=b[j][k];
					ans+=c[k][j];
				}
				d[j]=sum;e[j]=ans;
			}
			int flag=0;
			for(int j=1;j<=9;j++){
				if(d[j]!=9||e[j]!=9){
					flag=1;
					break;
				}
			}
			if(flag==0)  cout<<"yes"<<endl;
			else cout<<"no"<<endl;
		}
	}
} 

posted @ 2017-10-03 20:25  wang9897  阅读(88)  评论(0编辑  收藏  举报