C语言 数据结构中堆栈 迷宫求解的问题
#defineM20#defineS79#include<stdio.h>#include<stdlib.h>#include<time.h>#include<windo...
#define M 20
#define S 79
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
main()
{
k1:
srand((unsigned)time(NULL));
char a[M][S];
int x,y,k=1,i,j,f,n,ch,c[M*S*2],d[M*S*2],p[M*S],t[M*S];
for(i=0;i<M;i++)
for(j=0;j<S;j++)
a[i][j]=' ';
for(i=0,j=0;j<S;j++)
a[i][j]='*';
for(i=M-1,j=0;j<S;j++)
a[i][j]='*';
for(i=0,j=0;i<M;i++)
a[i][j]='*';
for(i=0,j=S-1;i<M;i++)
a[i][j]='*';
for(i=0;i<M*S/3;i++)
a[rand()%M][rand()%S]='*';
a[M-2][S-2]='E';
p[0]=1;
t[0]=1;
c[0]=1;
d[0]=1;
x=1;
y=1;
for(n=1;;n++)
{
f=1;
if(a[x][y+1]!='*'&&a[x][y+1]!='R'&&a[x][y+1]!='X')
y++;
else if(a[x+1][y]!='*'&&a[x+1][y]!='R'&&a[x+1][y]!='X')
x++;
else if(a[x][y-1]!='*'&&a[x][y-1]!='R'&&a[x][y-1]!='X')
y--;
else if(a[x-1][y]!='*'&&a[x-1][y]!='R'&&a[x-1][y]!='X')
x--;
else
f=0;
if(f)
{
if(a[x][y]=='E')
break;
p[k]=x;t[k]=y;
a[x][y]='R';
k++;
}
else
{
if(--k<0)
break;
a[x][y]='R';
x=p[k];
y=t[k];
}
c[n]=x;
d[n]=y;
}
a[1][1]='S';
for(i=0;i<M;i++)
{
for(j=0;j<S;j++)
printf("%c",a[i][j]);
printf("\n");
}
Sleep(2000);
for(i=0;i<n;i++)
printf("%d,%d\t",c[i],d[i]);
printf("\n\n\n");
for(i=0;i<k;i++)
printf("%d,%d\t",p[i],t[i]);
//Sleep(5000);
system("CLS");
goto k1;
return 0;
}
我写的这个程序有BUG 有时候不能完全探测出所有路径,求没有漏洞的算法
比如这张图 有一个点没探到(第一行靠中间靠左边点)
照理说应该能探到的 展开
#define S 79
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
main()
{
k1:
srand((unsigned)time(NULL));
char a[M][S];
int x,y,k=1,i,j,f,n,ch,c[M*S*2],d[M*S*2],p[M*S],t[M*S];
for(i=0;i<M;i++)
for(j=0;j<S;j++)
a[i][j]=' ';
for(i=0,j=0;j<S;j++)
a[i][j]='*';
for(i=M-1,j=0;j<S;j++)
a[i][j]='*';
for(i=0,j=0;i<M;i++)
a[i][j]='*';
for(i=0,j=S-1;i<M;i++)
a[i][j]='*';
for(i=0;i<M*S/3;i++)
a[rand()%M][rand()%S]='*';
a[M-2][S-2]='E';
p[0]=1;
t[0]=1;
c[0]=1;
d[0]=1;
x=1;
y=1;
for(n=1;;n++)
{
f=1;
if(a[x][y+1]!='*'&&a[x][y+1]!='R'&&a[x][y+1]!='X')
y++;
else if(a[x+1][y]!='*'&&a[x+1][y]!='R'&&a[x+1][y]!='X')
x++;
else if(a[x][y-1]!='*'&&a[x][y-1]!='R'&&a[x][y-1]!='X')
y--;
else if(a[x-1][y]!='*'&&a[x-1][y]!='R'&&a[x-1][y]!='X')
x--;
else
f=0;
if(f)
{
if(a[x][y]=='E')
break;
p[k]=x;t[k]=y;
a[x][y]='R';
k++;
}
else
{
if(--k<0)
break;
a[x][y]='R';
x=p[k];
y=t[k];
}
c[n]=x;
d[n]=y;
}
a[1][1]='S';
for(i=0;i<M;i++)
{
for(j=0;j<S;j++)
printf("%c",a[i][j]);
printf("\n");
}
Sleep(2000);
for(i=0;i<n;i++)
printf("%d,%d\t",c[i],d[i]);
printf("\n\n\n");
for(i=0;i<k;i++)
printf("%d,%d\t",p[i],t[i]);
//Sleep(5000);
system("CLS");
goto k1;
return 0;
}
我写的这个程序有BUG 有时候不能完全探测出所有路径,求没有漏洞的算法
比如这张图 有一个点没探到(第一行靠中间靠左边点)
照理说应该能探到的 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询