Describe AKnight'sJourney here
Source Code ¶
#include <stdio.h>
#include <memory.h>
int A[30][30];
int B[700][2];
int P, Q;
short 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=1;
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()
{
int p, q;
scanf("%d %d", &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 C









