随机步不难,就是效率低,每次移动最坏情况都要试满4个方向,还有更好的算法吗?
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <stdlib.h>
#include <time.h>
void generate_random_walk(char walk[10][10]);
void print_array(char walk[10][10]);
int main()
{
char walk[10][10];
generate_random_walk(walk);
print_array(walk);
return 0;
}
void print_array(char walk[10][10]);
int main()
{
char walk[10][10];
generate_random_walk(walk);
print_array(walk);
return 0;
}
void generate_random_walk(char walk[10][10])
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
walk[i][j]='.';
}
}
srand((unsigned)time(NULL));
char ch='B';
int ran;
int m=0,n=0;
walk[m][n]='A';
while(ch<='Z')
{
ran=rand()%4;
if (ran==0)
{
if(m-1>=0&&walk[m-1][n]=='.')
{
walk[m-1][n]=ch;
m=m-1;
ch++;
}
else if((m-1)<0&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m][n+1]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if (ran==1)
{
if((n+1)<10&&walk[m][n+1]=='.')
{
walk[m][n+1]=ch;
n=n+1;
ch++;
}
else if((n+1)>=10&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if(ran==2)
{
if((m+1)<10&&walk[m+1][n]=='.')
{
walk[m+1][n]=ch;
m=m+1;
ch++;
}
else if((m+1)>=10&&walk[m][n-1]!='.'&&walk[m-1][n]!='.'&&walk[m][n+1]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if(ran==3)
{
if((n-1)>=0&&walk[m][n-1]=='.')
{
walk[m][n-1]=ch;
n=n-1;
ch++;
}
else if((n-1)<0&&walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else
{
break;
}
}
}
void print_array(char walk[10][10])
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf(" %c",walk[i][j]);
}
printf("\n");
}
}
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
walk[i][j]='.';
}
}
srand((unsigned)time(NULL));
char ch='B';
int ran;
int m=0,n=0;
walk[m][n]='A';
while(ch<='Z')
{
ran=rand()%4;
if (ran==0)
{
if(m-1>=0&&walk[m-1][n]=='.')
{
walk[m-1][n]=ch;
m=m-1;
ch++;
}
else if((m-1)<0&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m][n+1]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if (ran==1)
{
if((n+1)<10&&walk[m][n+1]=='.')
{
walk[m][n+1]=ch;
n=n+1;
ch++;
}
else if((n+1)>=10&&walk[m][n-1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if(ran==2)
{
if((m+1)<10&&walk[m+1][n]=='.')
{
walk[m+1][n]=ch;
m=m+1;
ch++;
}
else if((m+1)>=10&&walk[m][n-1]!='.'&&walk[m-1][n]!='.'&&walk[m][n+1]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else if(ran==3)
{
if((n-1)>=0&&walk[m][n-1]=='.')
{
walk[m][n-1]=ch;
n=n-1;
ch++;
}
else if((n-1)<0&&walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.')
{
break;
}
else if(walk[m][n+1]!='.'&&walk[m+1][n]!='.'&&walk[m-1][n]!='.'&&walk[m][n-1]!='.')
{
break;
}
else
{
continue;
}
}
else
{
break;
}
}
}
void print_array(char walk[10][10])
{
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
{
printf(" %c",walk[i][j]);
}
printf("\n");
}
}
撞墙退出,遇阻换路