import java.io.*;
import java.util.*;
public class LXM {
int m;
int n;
int jz[][];
int num;
LXM()throws IOException{
Scanner cin = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
while(true){
m=cin.nextInt();
n=cin.nextInt();
if(m==0&&n==0){
System.out.println("Game over!");
break;
}
jz = new int [m][n];
solve();
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
System.out.print(jz[i][j]);
if(j!=n-1)System.out.print("/t");
}
System.out.println();
}
}
}
void solve(int x,int y,int z){
jz[x][y]=num;
num++;
/*
*依次递归赋值
*/
switch(z){
case 6:
if(y+1<=n-1&&jz[x][y+1]==0)
solve(x,y+1,z);
else
if(x+1<=m-1&&jz[x+1][y]==0)
solve(x+1,y,2);
break;
case 2:
if(x+1<=m-1&&jz[x+1][y]==0)
solve(x+1,y,z);
else
if(y-1>=0&&jz[x][y-1]==0)
solve(x,y-1,4);
break;
case 4:
if(y-1>=0&&jz[x][y-1]==0)
solve(x,y-1,z);
else
if(x-1>=0&&jz[x-1][y]==0)
solve(x-1,y,8);
break;
case 8:
if(x-1>=0&&jz[x-1][y]==0)
solve(x-1,y,z);
else
if(y+1<=n-1&&jz[x][y+1]==0)
solve(x,y+1,6);
break;
}
}
void solve(){
num=1;
solve(0,0,6); //逆时针方向 从(0,0)开始右边开始
}
public static void main(String[] args) throws IOException{
new LXM();
}
}
-----------------------------------------我 分 隔 你 哟 -------------------------------------------------------------------
输入:
5 5
0 0
输出:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
Game over!
-----------------------------------------我 分 隔 你 哟 -------------------------------------------------------------------
由于使用递归,所以数据不能很大,不然堆栈溢出错误。
建议数据范围在1<=m*n<=6400
由于JAVA 数组定义不能很大 所以也有限制。