pku 2446 Chessboard
2011-07-27 10:38
246 查看
题目:http://poj.org/problem?id=2446
本题和hdu1507类似,具体解释:/article/5651541.html
代码:
View Code
本题和hdu1507类似,具体解释:/article/5651541.html
代码:
View Code
#include<stdio.h> #include<string.h> #define maxn 51 int dx[]={-1,1,0,0}; int dy[]={0,0,-1,1}; int n,m,k,ans; int a[maxn][maxn],mark[maxn*maxn]; bool map[maxn*maxn][maxn*maxn],visit[maxn*maxn],hash[maxn][maxn]; void get_map() { int i,j,k,x,y,cnt=1; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!hash[i][j]) { a[i][j]=cnt; cnt++; } memset(map,0,sizeof(map)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!hash[i][j]) for(k=0;k<4;k++) { x=i+dx[k]; y=j+dy[k]; if(x>=1&&x<=n&&y>=1&&y<=m&&!hash[x][y]) { map[a[i][j]][a[x][y]]=1; map[a[x][y]][a[i][j]]=1; } } } bool dfs(int k) { int i,j,l; for(i=1;i<=n;i++) for(j=1;j<=m;j++) if(!hash[i][j]&&(i+j)%2==0) { l=a[i][j]; if(map[k][l]&&!visit[l]) { visit[l]=1; if(mark[l]==-1||dfs(mark[l])) { mark[l]=k; return 1; } } } return 0; } bool solve() { int i,j,num=0; memset(mark,-1,sizeof(mark)); for(i=1;i<=n;i++) for(j=1;j<=m;j++) { memset(visit,0,sizeof(visit)); if(!hash[i][j]&&(i+j)%2==1&&dfs(a[i][j])) { num++; } } if(num*2==ans) return 1; return 0; } int main() { int x,y; while(scanf("%d%d%d",&n,&m,&k)!=EOF) { ans=n*m-k; memset(hash,0,sizeof(hash)); while(k--) { scanf("%d%d",&x,&y); hash[y][x]=1; } get_map(); if(solve()) printf("YES\n"); else printf("NO\n"); } return 0; }
相关文章推荐
- poj 2446 Chessboard
- POJ 2446 : Chessboard(二部图算法)
- Poj 2446 Chessboard 匈牙利算法
- POJ 2446 Chessboard (二分图匹配)
- POJ 2446 Chessboard(二分图匹配)
- POJ 2446 Chessboard (二分图匹配)
- [poj 2446]Chessboard
- PKU 2446
- POJ_2446_Chessboard
- POJ 2446Chessboard(二分图最大匹配)
- poj 2446 Chessboard 二分图的最大匹配
- poj 2446 Chessboard(二分图最大匹配)
- poj 2446 Chessboard (二分图利用奇偶性匹配)
- POJ2446--Chessboard
- POJ 2446 Chessboard (匈牙利算法)
- POJ 2446 Chessboard(二分图最大匹配)
- [POJ] 2446 Chessboard(二分图最大匹配)
- pku 2446(二分匹配)
- POJ 2446 Chessboard【二分图匹配】
- POJ 2446 Chessboard (二分匹配)