POJ-1753-Flip Game
来源:互联网 发布:铁鹰行动 知乎 编辑:程序博客网 时间:2024/05/15 01:54
这道题目整整弄了一个下午,纠结啊。做完这道题目 我才发现原来我对于递归的理解是多么的差。
后来我在网上搜了搜,这道题目还得用dp思想,我晕。
我看那个POJ训练计划,这明明就是枚举嘛。。
做题思路:
这道题目的中一共有十六个棋子,每个棋子都有两种状态,翻和不翻。一共只有16个棋子,所以最多翻16次。
从翻一次,一直找到翻16次,找到就终止,没找到就是输出impossible;
#include<stdio.h>
int a[4][4];
void change(int x,int y)//建立函数改变此点的状态
{
if(x>=0&&x<=3&&y>=0&&y<=3)
a[x][y]=(a[x][y]+1)%2;
}
void chanes(int x)//建立函数求所需要改变的点
{
int i,j;
i=x/4;
j=x%4;
change(i,j);
change(i-1,j);
change(i+1,j);
change(i,j-1);
change(i,j+1);
}
int pan()//判断是否完成
{
int i,j;
int sum=0;
for(i=0;i<4;i++)
for(j=0;j<4;j++)
{
sum+=a[i][j];
}
if(sum%16==0)
return 1;
else
return 0;
}
int sou (int x,int y,int n)
{
int i,j;
if(pan())return 1;
if(n==0)return 0;
for(i=x;i<4;i++)
for(j=y;j<4;j++)
{
chanes(i*4+j);//改变此点以及周围的值
if(j==3)
{
if(sou(i+1,0,n-1))
return 1;
}
else
{
if(sou(i,j+1,n-1))
return 1;
}
chanes(i*4+j);变回来
}
return 0;
}
int main()
{
int i,j,k;
int s[4][4];
char str[5];
for(i=0;i<4;i++)
{
gets(str);
for(j=0;j<4;j++)
{
if(str[j]=='b')
s[i][j]=1;
else
s[i][j]=0;
}
}
for(i=0;i<=16;i++)//从翻0下一直找到翻16下,寻找符合的情况
{
for(k=0;k<4;k++)
for(j=0;j<4;j++)
a[k][j]=s[k][j];
if(sou(0,0,i))
{
printf("%d\n",i);
break;
}
}
if(i==17)
printf("Impossible\n");
return 0;
}
- poj 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- POJ 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- POJ-1753-Flip Game
- POJ 1753: Flip Game
- POJ 1753 Flip Game
- POJ 1753 Flip Game
- poj 1753 Flip Game
- poj 1753 Flip Game
- POJ 1753 Flip Game
- POJ-1753-Flip Game
- Poj 1753 Flip Game
- POJ 1753 Flip Game
- POJ-1753-Flip Game
- 注意 ExecuteNonQuery() 返回值 问题
- FaceBook网站架构软件揭秘
- 各种数据库查询前几条方法
- Java中HashMap遍历的两种方式
- 修复数据表(mysql repair table-Can’t open file: ‘[Table]mytable.MYI’.)
- POJ-1753-Flip Game
- jdk时区相差8小时
- ORA-00604 error occurred at recursive SQL level string
- jsp获取客户端真实的IP
- Python 文件与目录操作
- Oracle9i初始化参数中文说明
- struts2 启动StrutsPrepareAndExecuteFilte报ClassNotFoundException异常
- flvplayer.swf flv视频播放器使用方法
- 注意事项