poj2488(dfs)
来源:互联网 发布:c语言是干什么的 编辑:程序博客网 时间:2024/04/29 22:52
题意就是用象棋里马移动的方式走完棋盘里全部的格子
可以走完的输按字典序最小输出走过的格子 字典序最小只需要一开始行走的方向按照字典序要求处理下就好
如果这个棋盘可以走完 那么任何一个格子当做起点都可以走完 因此直接从第一个点出发就可以
至于路径 用个数组记录下就好了 不用担心最优路径被覆盖
搜索dfs回溯即可
#include <iostream>#include "stdio.h"#include "stdlib.h"#include "string.h"#include "algorithm"using namespace std;int leap;int p,q,tmp;int m[26][26];int dir[8][2]={ -2, -1 , -2, 1 , -1, -2 , -1, 2 , 1, -2 , 1, 2 , 2, -1 , 2, 1 };int path[100][2];int isin(int x,int y){ if(x>=1&&x<=q&&y>=1&&y<=p) return 1; return 0;}void dfs(int x,int y,int cnt){ if(leap==1) return; m[x][y]=1;cnt++; path[cnt][0]=x;path[cnt][1]=y; if(cnt==p*q) { leap=1; return ; } for(int i=0;i<8;i++) { int tempx=x+dir[i][0]; int tempy=y+dir[i][1]; if(isin(tempx,tempy)&&!m[tempx][tempy]){ dfs(tempx,tempy,cnt); m[tempx][tempy]=0; } }}int main(){ int t; tmp=0; scanf("%d",&t); while(t--) { scanf("%d%d",&p,&q); memset(m,0,sizeof m); leap=0; dfs(1,1,0); printf("Scenario #%d:\n",++tmp); if(!leap) printf("impossible\n\n"); else { for(int i=1;i<=p*q;i++) printf("%c%d",'A'-1+path[i][0],path[i][1]); printf("\n\n"); } } return 0;}
0 0
- POJ2488 DFS
- poj2488(dfs)
- POJ2488【DFS】
- poj2488(dfs)
- poj2488(dfs)
- poj2488(经典dfs)
- POJ2488 骑士游历(DFS)
- poj2488~dfs基础题
- DFS—poj2488
- POJ2488 -- POJ1154-- DFS
- POJ2488 dfs回溯
- poj2488 DFS基础
- poj2488 dfs模版
- Knight's Journey(poj2488,dfs)
- POJ2488——简单DFS
- 2011.11.17 poj2488 dfs+回溯法
- POJ2488 A Knight's Journey(DFS)
- poj2488旧题重做标准DFS
- STM32--vs1053 WAV录音实现(保存在SD卡)
- OBIEE中JS的使用---dashboard中prompt的展示和隐藏
- Android M Permissions 权限管理
- 此文为转载,虽然写的是PHP,但是思路同样值得javaer参考!
- 简单的横向下拉菜单js
- poj2488(dfs)
- C++面试100经典
- Java数据结构与算法之数组排序——奇偶排序
- 理解 C# 的Lock
- Next数组的计算
- 界面的设计总结
- Linux内核工程导论——内核架构概览
- MySQL 性能优化
- 《剑指Offer》面试题:复制复杂链表