标签:blog http io os ar for div log c
题目链接:http://acm.hrbust.edu.cn/vj/index.php?c=problem-problem&id=190592
题意:给出p*q的棋盘,从(A,1)开始,走“日”字,问能否走完棋盘上所有的点,如果能,按字典序输出路径;
思路:DFS,并保存路径即可,注意处理走的方向顺序int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}};
#include <stdio.h> #include <string.h> int vis[30][30], ansx[30],ansy[30]; int dir[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{1,2},{2,-1},{2,1}}; int p,q,flag; void dfs(int x, int y, int num) { int i, j; ansx[num]=x; ansy[num]=y; if(num==p*q) { flag=1; return ; } for(i=0; i<8; i++) { int xx=x+dir[i][0]; int yy=y+dir[i][1]; if(xx<=q && xx>=1 && yy<=p && yy>=1 && !vis[xx][yy] && !flag) { //printf("%d %d\n",xx,yy); //getchar(); vis[xx][yy]=1; dfs(xx,yy,num+1); vis[xx][yy]=0; } } } int main() { int t,_case=1; scanf("%d",&t); while(t--) { if(_case!=1) printf("\n"); printf("Scenario #%d:\n",_case++); scanf("%d%d",&p,&q); memset(vis,0,sizeof(vis[0])); vis[1][1]=1; flag=0; dfs(1,1,1); if(flag) for(int i=1; i<=p*q; i++) { printf("%c%d",ansx[i]+‘A‘-1,ansy[i]); } else printf("impossible"); printf("\n"); } return 0; }
标签:blog http io os ar for div log c
原文地址:http://www.cnblogs.com/sunshinecyh/p/3980431.html