1 /*HDU1507 2 3 */ 4 #include <iostream> 5 #include <cmath> 6 #include <algorithm> 7 #include <string.h> 8 #include <stdio.h> 9 #include <set> 10 #include <stack> 11 #include <queue> 12 #include <vector> 13 #define maxn 11100 14 using namespace std; 15 16 /*(x,y)--> num = (x-1) * (M) + y; 17 num -- > (x,y) == (num/M+1 ,num % M) 18 */ 19 vector<int>G[maxn]; 20 bool visit[maxn]; 21 int match[maxn]; 22 int a[][2]={{0,-1},{0,1},{1,0},{-1,0}}; 23 int N,M,K; 24 bool dfs(int s)//找到从s点出发的可增广路 25 { 26 for(int i=0;i<G[s].size();i++){ 27 int v=G[s][i]; 28 if (!visit[v]){ 29 visit[v]=true; 30 if (match[v]==0 || dfs(match[v])){//说明v对应的项有增广路 31 match[v]=s;//修改v的对应项(即互斥点)是s 32 return true; 33 } 34 } 35 } 36 return false; 37 } 38 39 int hungary(){ 40 int ans=0; 41 memset(match,0,sizeof(match));//清空匹配 42 for(int i=1;i<=N*M;i++){ 43 memset(visit,0,sizeof(visit));//注意清空增广路 44 if (dfs(i)) ans++; 45 } 46 return ans; 47 } 48 bool map[110][110]; 49 void read(){ 50 cin>>K; 51 memset(map,0,sizeof (map)); 52 for(int i=1; i <=K ;i++){ 53 int x,y; 54 scanf("%d%d",&x,&y); 55 map[x][y]=true; 56 } 57 } 58 void builtG(){ 59 for(int i=1;i<=M*N;i++){ 60 G[i].clear(); 61 } 62 for(int i=1;i<=N;i++){ 63 for(int j=1;j<=M;j++){ 64 if (map[i][j] || (i+j)%2==0) continue; 65 for(int l=0;l<4;l++){ 66 int x=i+a[l][0],y=j+a[l][1]; 67 if ( x<1 || x>N || y<1 || y>M || map[x][y]) continue; 68 // G[(x-1) * (M) + y].push_back((i-1) * (M) + j); 69 G[(i-1) * (M) + j].push_back((x-1) * (M) + y); 70 } 71 } 72 } 73 return ; 74 } 75 void getxy(int num,int &x,int &y){ 76 x = num/M + 1; 77 if (num % M == 0) x--; 78 y = num-(x-1)*M; 79 } 80 bool flag[maxn]; 81 int main(){ 82 while(~scanf("%d%d",&N,&M) && N && M){ 83 read(); 84 builtG(); 85 printf("%d ",hungary()); 86 memset(flag,0,sizeof(flag)); 87 for (int i=1;i<=N*M;i++){ 88 if (match[i]==0) continue; 89 int x1,y1,x2,y2; 90 getxy(i,x1,y1); 91 // cout<<"i="<<i<<","<<x<<","<<y<<endl; 92 getxy(match[i],x2,y2); 93 printf("(%d,%d)--(%d,%d) ",x1 ,y1,x2,y2); 94 flag[i]=flag[match[i]]=true; 95 } 96 printf(" "); 97 } 98 return 0; 99 }