| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1479 人关注过本帖, 1 人收藏
标题:迷宫题代码WA
只看楼主 加入收藏
Jianze
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-24
结帖率:0
收藏(1)
已结贴  问题点数:20 回复次数:5 
迷宫题代码WA
#include<stdio.h>
#include<string.h>
struct ge{
    int x,y;
};
struct ge data[120];
struct ge move[4];//方位数组

int main()
{
    //开辟结构数组;
    int mi[55][55],i,j,h,l,x,y;
    int rh,rl,ch,cl,count,Count,num,NUM,point,p;
    char gezi;
    move[0].x=0; move[1].x=1;  move[2].x=0; move[3].x=-1;
    move[0].y=1; move[1].y=0;  move[2].y=-1; move[3].y=0;
    while(scanf("%d%d",&h,&l)!=EOF)
    {
        if(h==0&&l==0)
            break;
        scanf("%d%d%d%d",&rh,&rl,&ch,&cl);
        getchar();
        for(i=1;i<=h+2;i++){
            for(j=1;j<=l+2;j++){
            if(i==1||i==h+2||j==1||j==l+2){
                mi[i][j]=0;
            }
            else{
            if(i>=3&&j==2)
            getchar();
            scanf("%c",&gezi);
            if(gezi=='.')
            mi[i][j]=1;
            else if(gezi=='#')
            mi[i][j]=0;
            }
            }
        }

//下列代码为出口寻找************************
        NUM=1;           //为进入循环而设置前置值
        Count=count=0;
        for(i=0;i<120;i++){
            data[i].x=-1;
            data[i].x=-1;
            }
        data[count].x=rh+2;
        data[count].y=rl+2;
        mi[rh+2][rl+2]=-1;//入口入栈并且赋值为-1
        point=0;       //跳出判断数值
        p=0;            //一个执行判断标准
        if(rh==ch&&rl==cl){
            printf("YES\n");
            p=1;
        }
       if(p==0){
        while(NUM>0){
        num=0;
            for(j=0;j<NUM;j++){

            for(i=0;i<4;i++){
                x=data[Count-j].x+move[i].x;//当前栈中
                y=data[Count-j].y+move[i].y;
                if(mi[x][y]==1){
                    if(x==ch+2&&y==cl+2){
                    printf("YES\n");
                    point=1;//寻找到出口结束跳出标志
                    break;}

                    else{
                    mi[x][y]=-1;//将走过的格子赋值为-1,防止重复
                    num+=1;//每个格子有的通路
                    count+=1;
                    data[count].x=x;
                    data[count].y=y;}
                    }
                    }//move

        if(point==1)
            break;
        }
        NUM=num;
        Count=count;

        if(point==1)
            break;
        }
        }
        if(NUM==0&&point==0&&p==0)
            printf("NO\n");



    }//while输入

    return 0;
}
搜索更多相关主题的帖子: count include 
2016-10-24 21:19
Jianze
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-24
收藏
得分:0 
这是题目
Description
一个迷宫可用类似于如下的一个二维数组来描述:

.#..#
.#..#
....#
#.#..
#....
图1   一个迷宫


图中,'.'表示可行走的通路,'#'表示障碍物,不可行走,也不可穿越。走迷宫时,只有上下左右四个方向可以行走,不可以斜着走。

假设此迷宫的入口坐标为(0,0)(左上角),出口坐标为(4,4)(右下角),则此迷宫可以通过如下的坐标序列(也可称为路径),从入口走到出口:

(0,0)  (1,0)  (2,0)  (2,1)  (2,2)  (2,3)  (3,3)  (3,4)  (4,4)

显然,此迷宫的路径不止一条。

你的任务就是要判断所给的迷宫是否有解,即是否存在至少一条从入口到出口的通路坐标序列。

Input
有多个测试用例。

每个测试用例的第一行是2个整数 m, n ,表示迷宫的长度和宽度。0 < m, n ≤ 50

第二行是4个整数 a, b, c, d,其中(a, b)表示迷宫的入口坐标,(c, d)表示出口坐标。

最后一个用例,m=n=0,不用处理。

Output
对每个迷宫输出一行结果,如果该迷宫有解,则输出"YES",否则输出"NO"。

Sample Input
5 5
0 0 4 4
.#..#
.#..#
....#
#.#..
#....
0 0

Sample Output
YES

Hint
关于迷宫的题目类型有很多,如求迷宫是否有解(如本题)、迷宫的最短路径有多长、迷宫的最短路径是什么,相关的变形的题目也不少,今后会慢慢接触到。

虽然可用多种算法来求解本题,但规定本题必须采用栈作为辅助数据结构来解决。
2016-10-24 21:20
Jianze
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2016-10-24
收藏
得分:0 
有人觉得哪里错了么
2016-10-24 21:23
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:0 
rh, rl, ch, cl这几个参数是干嘛的,还要手动输入
2016-10-25 09:17
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
收藏
得分:7 
回复 4楼 grmmylbs
每个测试用例的第一行是2个整数 m, n ,表示迷宫的长度和宽度。0 < m, n ≤ 50

第二行是4个整数 a, b, c, d,其中(a, b)表示迷宫的入口坐标,(c, d)表示出口坐标。

最后一个用例,m=n=0,不用处理。

Output
对每个迷宫输出一行结果,如果该迷宫有解,则输出"YES",否则输出"NO"。

Sample Input
5 5
0 0 4 4
.#..#
.#..#
....#
#.#..
#....
0 0

Sample Output
YES

虽然我没有弄懂栈算法原理,但我知道那是迷宫的起点和终点的坐标

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2016-10-25 13:11
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:7 
1.干嘛把所有的程序都放到main里去。不觉得很丑吗?虽然无关对错,但把程序分成几个函数模块多好.
程序代码:
     Count=count=0;
        for(i=0;i<120;i++){
            data[i].x=-1;
            data[i].x=-1;//for what?
            }
3.你的代码,我没有看到检测“越界”的情况,x,y小于0的情况处理了吗?没有吧!大于m,n呢?也没有吧。



φ(゜▽゜*)♪
2016-10-25 14:20
快速回复:迷宫题代码WA
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.051549 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved