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 |
囧.....原来还是数组开小了....In Reply To:附上re的code... Posted by:c4pt0r at 2008-07-13 10:26:13 > #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