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 |
wa了20多次,受不了了,求各位路过的指教下#include<iostream> #include<cstring> #define n 50*50 int visy[n],conny[n]; int mat[n][n]; int c,m; int kong[n][2]; int all; int dir[4][2]={{0,1},{0,-1},{1,0},{-1,0}}; using namespace std; bool find (int t) { int i; for(i=0;i<all;i++) { if(visy[i]==0&&mat[t][i]==1) { visy[i]=1; if(conny[i]==-1||find(conny[i])) { conny[i]=t; return true; } } } return false; } bool ok( int a,int b) { if(a>=0&&a<c&&b>=0&&b<m&&mat[a][b]!=-1) return true; return false; } bool judge(int a,int b,int a1,int b1) { if(a==a1&&abs(b-b1)==1) return true; else if(b==b1&&abs(a-a1)==1) return true; else return false; } int main() { int num; int i,j,k; while(scanf("%d%d%d",&c,&m,&num)==3) { memset(mat,0,sizeof(mat)); memset(conny,-1,sizeof(conny)); for(i=0;i<num;i++) { scanf("%d%d",&kong[i][0],&kong[i][1]); mat[kong[i][1]-1][kong[i][0]-1]=-1; } if((c*m-num)%2==1) {cout<<"NO"<<endl;continue;} all=c*m; int a,b; int a1,b1; for(i=0;i<all;i++) { if(i%2==1)continue; a=i/m; b=i%m; if(mat[a][b]!=-1) { for(k=0;k<4;k++) { a1=a+dir[k][0]; //a 是第几行 b1=b+dir[k][1]; //b是第几列 if(ok(a1,b1)&&judge(a,b,a1,b1)) mat[i][a1*m+b1]=1; } } } /*for(i=0;i<all;i++) { for(j=0;j<all;j++) { if(mat[i][j]==1) cout<<i<<" "<<j<<endl; } }*/ int tot=0; for(i=0;i<all;i++) { memset(visy,0,sizeof(visy)); if(find(i)) tot++; } //cout<<tot<<endl; if(tot*2+num==c*m) cout<<"YES"<<endl; else cout<<"NO"<<endl; } return 0; } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator