/* THE PROGRAM IS MADE BY PYY */
/*----------------------------------------------------------------------------//
Copyright (c) 2011 panyanyany All rights reserved.
URL : http://poj.org/problem?id=2446
Name : 2446 Chessboard
Date : Tuesday, December 6, 2011
Time Stage : half and one hour
Result:
9631289 panyanyany
2446
Accepted 176K 16MS C++
Test Data :
Review :
具体的解释,可以看一看大牛的解题报告:
飘过的小牛: http://blog.csdn.net/niushuai666/article/details/7031267
小媛在努力~: http://blog.csdn.net/zxy_snow/article/details/6249446
//----------------------------------------------------------------------------*/
#include <stdio.h>
#include <string.h>
#define MAXSIZE 33
int n, m, k ;
bool map[MAXSIZE][MAXSIZE] ;
struct {
int x, y ;
} link[MAXSIZE][MAXSIZE] ;
bool cover[MAXSIZE][MAXSIZE], graph[MAXSIZE][MAXSIZE] ;
int dir[4][2] = {1, 0, 0, 1, -1, 0, 0, -1} ;
bool find (int py, int px)
{
int i, j ;
int x, y ;
for (i = 0 ; i < 4 ; ++i)
{
y = py + dir[i][0] ;
x = px + dir[i][1] ;
if ((y >= 0 && y < m && x >= 0 && x < n) && // 判断边界
(cover[y][x] == false) &&
!((y+x) & 1) && // 横纵坐标和 为偶数
(map[y][x]))
{
cover[y][x] = true ;
if ((link[y][x].x == -1) || find (link[y][x].y, link[y][x].x))
{
link[y][x].y = py ;
link[y][x].x = px ;
return true ;
}
}
}
return false ;
}
int main ()
{
int i, j ;
int y, x ;
int sum ;
while (~scanf ("%d%d%d", &m, &n, &k))
{
memset (map, true, sizeof (map)) ;
for (i = 0 ; i < k ; ++i)
{
scanf ("%d%d", &x, &y) ;
// 它的默认图坐标是从0开始数的,而实际输入的是从1开始数的……
map[y-1][x-1] = 0 ;
}
// 若可用格子数为奇数,则必然不能放满
if ((m * n - k) & 1)
{
puts ("NO") ;
continue ;
}
memset (link, -1, sizeof (link)) ;
sum = 0 ;
for (i = 0 ; i < m ; ++i)
for (j = 0 ; j < n ; ++j)
{
// 从 横纵坐标和 为奇数的格子开始找
if (((i+j) & 1) && map[i][j])
{
memset (cover, 0, sizeof (cover)) ;
sum += find (i, j) ;
}
}
// printf ("%d\n", sum) ;
if (n*m - sum*2 == k)
puts ("YES") ;
else
puts ("NO") ;
}
return 0 ;
}
分享到:
相关推荐
初期: 一.基本算法: (1)枚举. (poj1753,poj2965) (2)贪心(poj1328,poj2109,poj2586) ... (5)二分图的最大匹配 (匈牙利算法) (poj3041,poj3020) (6)最大流的增广路算法(KM算法). (poj1459,poj3436) ......
北大POJ经典结题报告 北大POJ经典结题报告 北大POJ经典结题报告 注重方法,内容详尽,物超所值
NULL 博文链接:https://128kj.iteye.com/blog/1745671
很多的POJ题目答案!1000~1008,1011~1014,1016,1017,1019,1028,1032,1045,1046,1047,1050,1061,1067,1068,1088,1102,1159,1163,1183,1207,1218,1226,1247,1256,1258,1298,1316,1323,...
如果你为在poj上找不到解题思路而痛苦,那么这本书可以为你带来惊喜,里面包括了poj上一部分题解题报告~
北大POJ初级-图算法 解题报告+AC代码
ACM POJ 解题报告北大POJ 大量解题代码
北大POJ初级题-数据结构:解题报告+AC代码
北大poj解题报告,希望能帮到软件工程的同学,每天一道,持之以恒,熟能生巧,与您共勉!
北大POJ1159-Palindrome
北大POJ1837-Balance
北大poj JAVA源码
北大POJ第1005题答案(C语言)
poj openjudge 1111题最大正向匹配 提交ac
北大POJ初级-所有题目AC代码+解题报告
北大POJ初级-简单搜索 解题报告+AC代码
北大POJ200多道程序解答 完整代码 供大家参考 相互切磋
北大POJ第1324题(C++)
博客链接 http://blog.csdn.net/CABI_ZGX/article/details/52701138
NULL 博文链接:https://128kj.iteye.com/blog/1772172