首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

迷宫有关问题,小弟我的代码到底有什么有关问题呢?求解

2012-04-15 
迷宫问题,我的代码到底有什么问题呢?求解,在线等问题是这样的标题: 迷宫问题时 限: 100000 ms内存限制: 10

迷宫问题,我的代码到底有什么问题呢?求解,在线等
问题是这样的
标题: 迷宫问题 
时 限: 100000 ms 
内存限制: 100000 K 
总时限: 3000 ms 
描述: 迷宫问题
 
迷宫是一个二维矩阵,其中1为墙,0为路,3为入口,4为出口.要求从入口开始,从出口结束,按照 下,左,上,右 的顺序来搜索路径. 
输入: 迷宫宽度w 迷宫高度h
迷宫第一行
迷宫第二行
...
迷宫第h 行 
输出: 入口横坐标1 入口纵坐标1
横坐标2 纵坐标2
横坐标3 纵坐标3
横坐标4 纵坐标4
...
横坐标n-1 纵坐标n-1
出口横坐标n 出口纵坐标n 
输入样例: 8 10
1 1 1 1 1 1 1 1
1 0 1 1 0 1 0 1
1 0 1 0 0 1 0 1
1 1 0 3 1 0 1 1
1 0 0 1 0 0 4 1
1 0 0 0 0 1 1 1
1 0 1 0 0 1 0 1
1 0 1 0 0 0 1 1
1 1 1 1 0 0 0 1
1 1 1 1 1 1 1 1 
输出样例: 3 3
2 3
2 4
2 5
3 5
3 6
3 7
4 7
4 6
4 5
4 4
5 4
6 4
  

C/C++ code
#include <stdio.h>#include <stdlib.h>struct num{    int x;    int y;};struct sqlist{    struct num *top;    struct num *base;    int MAXSIZE;};struct sqlist s;void Initstack(){    s.base=(struct num *)malloc(20*sizeof(struct num));    if(s.base==NULL)    exit(0);    s.top=s.base;    s.MAXSIZE=20;}void push(int x,int y,struct sqlist s){    if(s.top-s.base>=s.MAXSIZE)    {        s.base=(struct num *)realloc(s.base,(s.MAXSIZE+5)*sizeof(struct num));        if(s.base==NULL)        exit(0);        s.top=s.base+s.MAXSIZE;        s.MAXSIZE += 5;    }    s.top->x =x;    s.top->y=y;    s.top++;}void pop(struct sqlist s){    if(s.base==s.top)    exit(0);    s.top--;}int main(){    int m,n;    int i,j;    int fx=0;//0~3分别是上下左右    int **p,**p1;    int x,y;    scanf("%d%d",&x,&y);    p=(int **)malloc(x*sizeof(int *));    for(i=0;i<x;i++)    {        p[i]=(int *)malloc(y*sizeof(int));    }    for(i=0;i<x;i++)    {        for(j=0;j<y;j++)        {            scanf("%d",&p[i][j]);        }    }    p1=(int **)malloc(x*sizeof(int *));    for(i=0;i<x;i++)    {        p1[i]=(int *)malloc(y*sizeof(int));    }    for(i=0;i<x;i++)    {        for(j=0;j<y;j++)        {            p1[i][j]=0;        }    }    Initstack();    for(i=0;i<x;i++)    {        for(j=0;j<y;j++)        {            if(p[i][j]==3)            {                p1[i][j]=1;                push(i,j,s);                m=i;                n=j;                goto lv1;            }        }    }    lv1:while(1)    {        if(fx!=1&&p1[i][j-1]==0&&p[i][j-1]==0)        {            j--;            m=i;            n=j;            p1[i][j]=1;            push(m,n,s);            fx=0;        }        else if(fx!=0&&p1[i][j+1]==0&&p[i][j+1]==0)        {            j++;            m=i;            n=j;            p1[i][j]=1;            push(m,n,s);            fx=1;        }        else if(fx!=2&&p1[i+1][j]==0&&p[i+1][j]==0)        {            i++;            m=i;            n=j;            p1[i][j]=1;            push(m,n,s);            fx=3;        }        else if(fx!=3&&p1[i-1][j]==0&&p[i-1][j]==0)        {            i--;            m=i;            n=j;            p1[i][j]=1;            fx=2;        }        else        {            pop(s);            i=s.top->x;            j=s.top->y;        }    }    while(s.top!=s.base)    {        printf("%d %d\n",s.top->x,s.top->y);        s.top--;    }    return 0;}

菜鸟求解啊...

[解决办法]
试试在cmd窗口里面输入exe文件名执行。

热点排行
Bad Request.