poj 3279 Filptile
来源:互联网 发布:java中无参构造方法 编辑:程序博客网 时间:2024/06/05 07:45
M代表横坐标,N代表纵坐标,res是最终的反转情况,tem是中间过程记录的某一种反转情况
init是初始输入的数据。
#include<stdio.h>
#define MAX_N 16
int init[MAX_N][MAX_N],res[MAX_N][MAX_N],tem[MAX_N][MAX_N];
int M,N;
int mov[][2]={0,0,0,1,0,-1,1,0,-1,0};
int color(int x,int y)//判断格子x,y现在的颜色,1代表黑色,代表白色
{
int x1,y1,num,i;
num=init[x][y];//首先是输入的颜色
for(i=0;i<5;i++)
{
x1=x+mov[i][0];
y1=y+mov[i][1];
if(x1>=0&&x1<M&&y1>=0&&y1<N)
num+=tem[x1][y1];//再加上 上下左右旁边格子是否翻动的情况
}
return num%2;//如果是偶数,则相当于格子是白色,否则就是黑色。
}
int calc(void)
{
int i,j,sum;
for(i=1;i<M;i++)
for(j=0;j<N;j++)
{
if(color(i-1,j))//如果是黑色
tem[i][j]=1;//那么就要反转这个黑色格子(i-1,j)下面的格子(i,j)
}
for(j=0;j<N;j++)//检查最后一行格子是否全是白色
if(color(M-1,j))
return -1;
sum=0;
for(i=0;i<M;i++)
for(j=0;j<N;j++)
sum+=tem[i][j];//计算反转的次数
return sum;
}
int main(void)
{
int i,j,sum,co;
scanf("%d%d",&M,&N);
for(i=0;i<M;i++)
for(j=0;j<N;j++)
scanf("%d",&init[i][j]);
sum=-1;
for(i=0;i<1<<N;i++)
{
memset(tem,0,sizeof(tem));
for(j=0;j<N;j++)
tem[0][N-j-1]=i>>j&1;
co=calc();
if(co>0&&(sum<0||sum>co))
{
sum=co;
memcpy(res,tem,sizeof(tem));
}
}
if(sum<0)
printf("IMPOSSIBLE\n");
else
{
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%d ",res[i][j]);
printf("\n");
}
}
}
- poj 3279 Filptile
- poj 3279 Filptile (USACO 2007 Open Silver)
- poj 3279 poj 1753
- poj 3279
- poj 3279
- 3279POJ
- poj 3279
- POJ 3279
- poj 3279
- poj 3279
- POJ 3279
- 开关问题 POJ 3276 POJ 3279 POJ 1222
- POJ--1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- POJ 1002 487-3279
- poj 1002 "487-3279"
- POJ 1002 487-3279
- PAT_A 1120. Friend Numbers (20)
- iOS 一个方法首次安装滚播图 展示应用简介
- bat批处理编程基本语法2
- poj3259 Wormholes
- 15.MATLAB因子分析
- poj 3279 Filptile
- keepalived
- Arduino应用笔记(一)利用蜂鸣器播放天空之城
- Spring Cloud构建微服务架构(七)消息总线(续:Kafka)
- Unity 3D在Windows7下使用腾讯云游戏语音Poll无法获得回调问题
- C语言的那些小秘密之volatile
- BZOJ 1066, 蜥蜴
- Spring Boot构建RESTful API与单元测试
- PAT_A 1121. Damn Single (25)