【搜索】棋盘 luogu-3956
2018-09-26 16:12
399 查看
分析
按照这个题目随便写一个搜索就可以了
AC代码
#include <cstdio> #include <cstring> #include <algorithm> #include <ctype.h> #include <iostream> using namespace std; const int dx[4]={-1,0,1,0}; const int dy[4]={0,-1,0,1}; const int inf=1<<30; int a[105][105],color[105][105],f[105][105]; int m,n,ans; inline int read() { int x=0,w=0;char ch=0; while (!isdigit(ch)) {w|=ch=='-';ch=getchar();} while (isdigit(ch)) {x=(x<<1)+(x<<3)+(ch^48);ch=getchar();} return w?-x:x; } void dfs(int x,int y,bool flag,int sum) { if (sum>=f[x][y]) return ; f[x][y]=sum; if (x==m && y==m) { ans=min(ans,sum); return ; } for (int i=0;i<4;i++) { int nx=x+dx[i],ny=y+dy[i]; if (nx<1||nx>m||ny<1||ny>m) continue; if (color[nx][ny]==-1) { if (flag) { color[nx][ny]=color[x][y]; dfs(nx,ny,0,sum+2); color[nx][ny]=-1; } } else { if (color[nx][ny]==color[x][y]) dfs(nx,ny,1,sum); else dfs(nx,ny,1,sum+1); } } } int main() { m=read(),n=read(); for (int i=1;i<=m;i++) for (int j=1;j<=m;j++) color[i][j]=-1,f[i][j]=inf; for (int i=1;i<=n;i++) { int x=read(),y=read(),c=read(); color[x][y]=c; } ans=inf; dfs(1,1,1,0); if (ans==inf) printf("-1\n"); else printf("%d\n",ans); return 0; }
相关文章推荐
- 【搜索】单词接龙 luogu-1019
- POJ - 1321 棋盘问题 [kuangbin带你飞]专题一 简单搜索
- 搜索系列——1321 棋盘问题
- poj 1321 棋盘问题(简单搜索)
- POJ1321 棋盘问题 kaungbin-搜索入门-A
- kuangbin 简单搜索 A 棋盘问题
- 暑假集训第三周第二阶段 搜索 F - 棋盘问题
- POJ 1321 棋盘问题类似八皇后 dfs搜索
- Luogu 2540 斗地主增强版(搜索,动态规划)
- 搜索练习1/棋盘问题 dfs详解
- POJ 1753 Flip Game 棋盘状态搜索
- 【分治法】分治法与二分搜索,棋盘覆盖问题
- 洛谷 3956 棋盘
- 搜索进阶——棋盘问题
- Luogu 1169 棋盘制作:计数问题
- poj1321-棋盘-递归搜索
- 0003算法笔记——【分治法】分治法与二分搜索,棋盘覆盖问题
- [kuangbin带你飞]专题1 简单搜索 A - 棋盘问题 POJ - 1321
- HDU 2067 小兔的棋盘(简单dp、搜索、卡特兰数)
- 【搜索-DFS】POJ1321-棋盘问题