银行排队

来源:互联网 发布:c语言字母转换为ascii 编辑:程序博客网 时间:2024/04/27 17:23

问题 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;}

0 0
原创粉丝点击