博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
TOJ 1702.A Knight's Journey
阅读量:6852 次
发布时间:2019-06-26

本文共 1560 字,大约阅读时间需要 5 分钟。

2015-06-05

问题简述:

  有一个 p*q 的棋盘,一个骑士(就是中国象棋里的马)想要走完所有的格子,棋盘横向是 A...Z(其中A开始 p 个),纵向是 1...q。

  原题链接:

解题思路:

  DFS:深搜把所有情况都考虑一遍,当骑士走出棋盘或走到原来走过的格子时,旅行失败了;当骑士能一直走下去直到走过的格子数等于 p*q 时,旅行成功。

  提交过程中一直有一个问题使这个代码一直WA,最后才发现是 p、q输入反了,先输入的数是 q(也就是纵向的数字标号)。。。

源代码:

1 /* 2 OJ: TOJ 3 ID: 3013216109 4 TASK: 1702.A Knight's Journey 5 LANG: C++ 6 NOTE: DFS 7 */ 8 #include 
9 #include
10 11 int n,p,q,flag;12 int x[8]={-2,-2,-1,-1,1,1,2,2};13 int y[8]={-1,1,-2,2,-2,2,-1,1};14 char tmp[27]={
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"};15 char ans1[27];16 int ans2[27];17 int visited[35][35];18 19 bool dfs(int a,int b) {20 if(!visited[a][b]) visited[a][b]=1;21 else return false;     //如果走到已经走过的棋盘,则失败22 ans1[flag]=tmp[a-1];23 ans2[flag]=b;24 flag++;25 if(flag>=p*q) return true; //走完所有的格子,则成功26 for(int i=0;i<8;i++) {27 if(a+x[i]>0&&a+x[i]<=p&&b+y[i]>0&&b+y[i]<=q&&dfs(a+x[i],b+y[i]))28 return true;    //如果下一步不走出棋盘且能走完剩下的格子,则成功29 }30 visited[a][b]=0;31 flag--;            //回溯32 return false;        //不能成功的走完所有的格子,则失败33 }34 35 int main()36 {37 scanf("%d",&n);38 int i,j,k=1;39 while(n--) {40 printf("Scenario #%d:\n",k++);41 scanf("%d %d",&q,&p);42 flag=0;43 memset(visited,0,sizeof(visited));44 int solved=0;45 for(i=1;i<=p;i++) {46 for(j=1;j<=q;j++) { //遍历所有可能的起点47 if(dfs(i,j)) {48 solved=1;49 for(int l=0;l

 

转载于:https://www.cnblogs.com/ACMans/p/4554204.html

你可能感兴趣的文章
【Android学习之旅1】研究概述
查看>>
我很幸运
查看>>
Excel数据筛选出来后修改再粘贴进去的方法
查看>>
STM32F4的sct文件理解
查看>>
复制目录结构
查看>>
第 1 章 虚拟化 - 008 - LVM 类型的 Storage Pool
查看>>
PowerPoint 2007 如何把背景音乐嵌入到PPt文件当中
查看>>
手动安装linux操作系统
查看>>
[学习windows/记录篇]站点之间建立***
查看>>
Hbase权限配置以及使用手册
查看>>
vertical-align,text-align 和 align的区别
查看>>
Unity3d多线程
查看>>
炉石传说 C# 开发笔记 (源代码整理公开)
查看>>
前端文摘:Web 开发模式演变历史和趋势
查看>>
最大子数组和问题的解
查看>>
cout设置输出数据不显示科学计数法
查看>>
zoj 1659 Mobile Phone Coverage(矩形面积并)
查看>>
python学习 day3
查看>>
Centos 6.4下用Squid配置反向代理多个内网WEB服务器
查看>>
王者荣耀之父姚晓光“奇葩”的工作理念
查看>>