poj1753-Flip Game DFS解法
这道题目的难点是理解最多有2^16次方种可能,需要理解每个棋子只能翻一次或者不翻。这么这道题目就可以用DFS暴力解决!
#include<stdio.h> char a[4][4]; int map[4][4]; int min=99999; int t; void dfs(int step); void flip(int x,int y){ map[x][y]=!map[x][y]; if(x>=1) map[x-1][y]=!map[x-1][y]; if(x<=2) map[x+1][y]=!map[x+1][y]; if(y>=1) map[x][y-1]=!map[x][y-1]; if(y<=2) map[x][y+1]=!map[x][y+1]; } bool judge(){ for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(map[i][j]!=map[0][0]) return 0; return 1; } int main(){ for(int i=0;i<4;i++) scanf("%s",&a[i]); for(int i=0;i<4;i++) for(int j=0;j<4;j++) if(a[i][j]=='b') map[i][j]=0; else map[i][j]=1; t=0; dfs(0); if(min==99999) printf("Impossible"); else printf("%d",min); return 0; } void dfs(int step){ if(step==16) { if(judge()) if(min>=t) min=t; return; } for(int i=0;i<2;i++){ if(i==0) dfs(step+1); else{ flip(step/4,step%4); t++; dfs(step+1); flip(step/4,step%4); t--; } } }
【推荐】还在用 ECharts 开发大屏?试试这款永久免费的开源 BI 工具!
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 后端思维之高并发处理方案
· 理解Rust引用及其生命周期标识(下)
· 从二进制到误差:逐行拆解C语言浮点运算中的4008175468544之谜
· .NET制作智能桌面机器人:结合BotSharp智能体框架开发语音交互
· 软件产品开发中常见的10个问题及处理方法
· 后端思维之高并发处理方案
· 千万级大表的优化技巧
· 在 VS Code 中,一键安装 MCP Server!
· 想让你多爱自己一些的开源计时器
· 10年+ .NET Coder 心语 ── 继承的思维:从思维模式到架构设计的深度解析