题意:模拟国际象棋中马的走棋方式,其实和中国象棋的马走的方式其实是一样的,马可以从给定的方格棋盘中任意点开始,问是否能遍历全部格子,能的话输出字典序最小的走棋方式,否则输出impossible

思路:只要能遍历全部的格子,就一定会走A1这个点,而且这个点的字典序是最小的,保证了这点的话还需要保证dfs的8个方向也要按照字典序最小来走,这样就可以确保所走的路径就是字典序最小的

坑爹:自己忘记输出Scenario #i,一连WA了几发,就是不知道自己错在哪里,顺便发一个对照的程序吧我的程序过16MS,他的程序0MS

先贴自己的

 #include<cstdio>
#include<cstring>
#include<cmath>
const int qq=;
int vis[qq][qq];
int dx[]={-,-,-,-,,,,},
dy[]={-,,-,,-,,-,};
int map[qq][qq];
int n,m,flag,ans;
int check(int y,int x)
{
if(x<||y<||x>m||y>n||map[y][x])
return ;
return ;
}
void dfs(int y,int x,int step)
{
if(flag) return;
if(check(y,x)) return;
vis[step][]=x;
vis[step][]=y;
if(step==n*m){
flag=;
ans=step;
return;
}
for(int i=;i<;++i){
map[y][x]=;
dfs(y+dy[i],x+dx[i],step+);
map[y][x]=;
}
return;
}
int main()
{
int t,o=;scanf("%d",&t);
while(t--)
{
flag=;
scanf("%d%d",&n,&m);
memset(vis,,sizeof(vis));
memset(map,,sizeof(map));
ans=;
dfs(,,);
printf("Scenario #%d:\n",o++);
if(ans!=n*m){
printf("impossible");
}
else{
for(int i=;i<=ans;++i){
printf("%c",vis[i][]+'A'-);
printf("%d",vis[i][]);
}
}
printf("\n");
if(t!=) printf("\n");
}
return ;
}
 #include<cstdio>
.#include<cstring>
.#include<algorithm>
.using namespace std;
.
.int path[][], vis[][], p, q, cnt;
.bool flag;
.
.int dx[] = {-, , -, , -, , -, };
.int dy[] = {-, -, -, -, , , , };
.
.bool judge(int x, int y)
.{
. if(x >= && x <= p && y >= && y <= q && !vis[x][y] && !flag)
. return true;
. return false;
.}
.
.void DFS(int r, int c, int step)
.{
. path[step][] = r;
. path[step][] = c;
. if(step == p * q)
. {
. flag = true;
. return ;
. }
. for(int i = ; i < ; i++)
. {
. int nx = r + dx[i];
. int ny = c + dy[i];
. if(judge(nx,ny))
. {
.
. vis[nx][ny] = ;
. DFS(nx,ny,step+);
. vis[nx][ny] = ;
. }
. }
.}
.
.int main()
.{
. int i, j, n, cas = ;
. scanf("%d",&n);
. while(n--)
. {
. flag = ;
. scanf("%d%d",&p,&q);
. memset(vis,,sizeof(vis));
. vis[][] = ;
. DFS(,,);
. printf("Scenario #%d:\n",++cas);
. if(flag)
. {
. for(i = ; i <= p * q; i++)
. printf("%c%d",path[i][] - + 'A',path[i][]);
. }
. else
. printf("impossible");
. printf("\n");
. if(n != )
. printf("\n");
. }
. return ;
.}

最新文章

  1. JSON.parse和eval的区别
  2. html: title换行方法 如a链接标签内title属性鼠标悬停提示内容换行
  3. Scala
  4. 创建oracle数据库job服务:PlSqlDev操作job
  5. 应该掌握的MySQL命令、MySQL语句
  6. Codeforces Round #318 [RussianCodeCup Thanks-Round] (Div. 2) A. Bear and Elections 优先队列
  7. Error: 16GU盘变1G,恢复
  8. String的成员方法的使用
  9. uva 10026 Shoemaker&#39;s Problem(排序)
  10. Huffman树编码-优先队列实现
  11. 《JS权威指南学习总结--6.3删除属性》
  12. 算法-java代码实现计数排序
  13. PHP内核之旅-2.SAPI中的Cli
  14. [archlinux]在linux使用aria2下载磁力链接
  15. 【redux】详解react/redux的服务端渲染:页面性能与SEO
  16. What is 软件工程
  17. redis主从|哨兵|集群模式
  18. Dictionary应用
  19. [Windows Azure]The Autoscaling Application Block
  20. ulimit限制打开的文件数量

热门文章

  1. ecshop二次开发之视频上传
  2. JavaScript--函数中this的几种指向
  3. jmeter的关联-正则表达式的应用
  4. day39-Spring 05-Spring的AOP:不带有切点的切面
  5. day40-Spring 02-事务的回顾
  6. @codeforces - 715E@ Complete the Permutations
  7. zabbix概述篇
  8. iOS 内存管理arc
  9. 前端web设置div宽高一样
  10. Java面向对象----String对象的声明和创建