求问一个关于生成随机步法的数组问题

题目是:编写程序,生成一种贯穿10*10字符数组(初始时全为字符 ‘.’ )的“随机步法”。程序必须随机地从一个元素“走到”另一个元素,每次都上下、向左或向右移动一个元素位置。已访问过的元素按访问顺序用字母A到Z进行标记。

#include
#include
#include
#define N 10
main()
{
char m[26]={'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
char a[N][N]={0};
int i=0;
int j=0;
int n;
int k=1;
int count=0;
a[0][0]=m[0];

while(k<26)
{
    srand((unsigned)time(NULL));
    n=rand()%4;
    switch(n)
    {
    case 0:
        if(a[i-1][j]==0 && i-1>=0)
        {
            i=i-1;
            a[i][j]=m[k];
            k++;
            count=0;
        }
        else if (a[i-1][j]!=0)
        {
            count++;
        }
        break;

    case 1:
        if(a[i+1][j]==0 && i+1<10)
            {
                i=i+1;
                a[i][j]=m[k];
                k++;
                count=0;
            }
            else if(a[i+1][j]!=0)
            {
                count++;
            }
            break;
    case 2:
            if(a[i][j-1]==0 && j-1>=0)
            {
                j=j-1;
                a[i][j]=m[k];
                k++;
                count=0;
            }
            else if(a[i][j-1]!=0)
            {
                count++;
            }
            break;

    case 3:
        if(a[i][j+1]==0 && j+1<10)
        {
            j=j+1;
            a[i][j]=m[k];
            k++;
            count=0;
        }
        else if(a[i][j+1]!=0)
        {
            count++;
        }
        break;
    } 
    if(count==4)
        break;
}




for(i=0;i<10;i++)
{
    for (j=0;j<10;j++)
    {
        if(a[i][j]==0)
            a[i][j]='.';
        printf("%2c",a[i][j]);
    }
    printf("\n");
}

}
输出结果只有单排或者单列的A~J
求问如何解决,谢谢。