又水了道题,罪过..
#include <stdio.h> #include <string.h> int n,m; char board[100][100]; int dfs(int x,int y,int num,int d) { int i,row,col,dir[4][2]={0,1,1,0,0,-1,-1,0}; if (num==n*m)return 1; for (i=d;;i++) { row=x+dir[i%4][0]; col=y+dir[i%4][1]; if(row>=0&&col>=0&&row<n&&col<m&&board[row][col]=='.') { board[row][col]='A'+num%26; if(dfs(row,col,num+1,i%4))return 1; } } return 0; } int main() { int i,j; while (scanf("%d%d",&n,&m)!=EOF) { memset(board,'.',sizeof(board)); board[0][0]='A'; dfs(0,0,1,0); for (i=0;i<n;i++) { for (j=0;j<m;j++) printf(" %c",board[i][j]); printf("\n"); } } return 0; }