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的code...In Reply To:Runtime Error???? Posted by:c4pt0r at 2008-07-13 10:16:12 #include <iostream> #define MAX 150 using namespace std; int g[MAX][MAX]; int d[MAX][MAX]; int used[MAX][MAX]; int ans[MAX*MAX]; int use[MAX*MAX]; int num; int k,x,y; int n,m; int dfs(int a) //dfs寻路 { int b; for(b=1;b<=num;b++) if (g[a][b]==1 && use[b]==0) { use[b]=1; if (!ans[b]||dfs(ans[b])) { ans[b]=a; return 1; } } return 0; } int main() { int i,j; scanf("%d%d%d",&n,&m,&k);//原来写的是while(scanf(...)!=EOF) { memset(g,0,sizeof(g)); memset(d,0,sizeof(d)); memset(ans,0,sizeof(ans)); memset(used,0,sizeof(used)); for(i=0;i<k;i++) { scanf("%d%d",&y,&x); used[x][y]=1; } num=n*m-k; int z=1; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) if(!used[i][j]) d[i][j]=z++; } for (i=1;i<=n;i++) { for (j=1;j<=m;j++) if (!used[i][j]) //建图 { int t=d[i][j]; if (i-1>=1 && !used[i-1][j] ) g[t][d[i-1][j]]=1; if (j-1>=1 && !used[i][j-1] ) g[t][d[i][j-1]]=1; if (i+1<=n && !used[i+1][j] ) g[t][d[i+1][j]]=1; if (j+1<=m && !used[i][j+1] ) g[t][d[i][j+1]]=1; } } for(i=1;i<=num;i++) { memset(use,0,sizeof(use)); dfs(i); //寻路 } int f=0; for(i=1;i<=num;i++) { if(ans[i]==0){f=1;cout<<"NO"<<endl;break;}//如果有没匹配上的 } if(!f) cout<<"YES"<<endl; } } Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator