Describe AKnight'sJourney here
Source Code ¶
#include <stdio.h> #include <memory.h> int A[30][30]; int B[700][2]; int P, Q; bool Flag; void R(int n, int p, int q) { if(Flag){ return; }else if(1>p || p>P || 1>q || q>Q || A[p][q]){ return; }else if(n==P*Q){ B[n][0]=p; B[n][1]=q; Flag=true; return; }else{ B[n][0]=p; B[n][1]=q; A[p][q]=1; R(n+1, p-2, q-1); R(n+1, p-2, q+1); R(n+1, p-1, q-2); R(n+1, p-1, q+2); R(n+1, p+1, q-2); R(n+1, p+1, q+2); R(n+1, p+2, q-1); R(n+1, p+2, q+1); if(Flag){ return; } A[p][q]=0; B[n][0]=0; B[n][1]=0; } } void solve() { scanf("%d %d", &P, &Q); int p, q; for(p=1; p<=P; p++){ for(q=1; q<=Q; q++){ if(!Flag){ R(1, p, q); }else{ return; } } } } int main() { int n; int i, j; scanf("%d", &n); for(i=1; i<=n; i++){ Flag=0; memset(A, 0, sizeof(A)); printf("Scenario #%d\n", i); solve(); if(Flag){ for(j=1; j<=P*Q; j++){ printf("%c%c", B[j][1]+'A'-1, B[j][0]+'0'); } }else{ printf("impossible"); } printf("\n\n"); } return 0; }
/// WA