问题 K 算法3-3:迷宫
时间限制: 1 Sec 内存限制: 128 MB[ 提交]
题目描述
有一个 10 x 10 的迷宫,起点是‘S’,终点是‘E’,墙是‘#’,道路是空格。一个机器人从起点走到终点。当机器人走到一个通道块,前面已经没有路可走时,它会转向到当前面向的右手方向继续走。如果机器人能够过,则留下足迹‘*’,如果走不通,则留下标记‘!’。
下面给出书中的算法,请你模拟机器人的走法输出最终的状态。
图:迷宫算法
输入
一个 10 x 10 的二维字符数组。
输出
机器人走过的路径状态。
样例输入
###########S # # ## # # ## ## ## ### ## # ## # # ## ### ## ### E###########
样例输出
###########**#!!!# ## *#!!!# ##**!!## ##*### ##***# ## #***# ## ###*## ### ****###########
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<malloc.h>
#include<math.h>
char s[10][10];
int a[100];
int b[100];
int top=0;
int stx,sty;
int enx,eny;
int flag=0;
void ge(int i,int j){
while(i!=enx||j!=eny){
switch( pan(i,j) ){
case 1:j++;s[i][j]='*';top++;a[top]=i;b[top]=j;break;
case 2:i++;s[i][j]='*';top++;a[top]=i;b[top]=j;break;
case 3:j--;s[i][j]='*';top++;a[top]=i;b[top]=j;break;
case 4:i--;s[i][j]='*';top++;a[top]=i;b[top]=j;break;
default:
s[a[top]][b[top]]='!';
top--;
if(top>=0){
i=a[top];
j=b[top];
}
else
flag=1;
break;
}
if(flag==1)
break;
}
}
int pan(int i,int j){
int next[4][2]={{0,1},{1,0},{0,-1},{-1,0}};
int k;
int tx,ty;
for(k=0;k<4;k++){
tx=i+next[k][0];
ty=j+next[k][1];
if(s[tx][ty]==' '||s[tx][ty]=='E'){
return k+1;
}
}
return -1;
}
int cho(int i,int j){
}
int main(){
int i,j;
for(i=0;i<10;i++){
gets(s[i]);
}
for(i=0;i<10;i++){
for(j=0;j<10;j++){
if(s[i][j]=='S'){
stx=i;
sty=j;
}
else if(s[i][j]=='E'){
enx=i;
eny=j;
}
}
}
a[top]=stx;
b[top]=sty;
s[a[top]][b[top]]='*';
ge(stx,sty);
for(i=0;i<10;i++){
for(j=0;j<10;j++){
printf("%c",s[i][j]);
};
printf("\n");
}
return 0;
}