| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1241 人关注过本帖
标题:迷宫 二维数组 输出不了?
只看楼主 加入收藏
xiamomo
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-11-26
结帖率:60%
收藏
已结贴  问题点数:18 回复次数:7 
迷宫 二维数组 输出不了?
定义一个二维数组:

int maze[5][5] = {
    0, 1, 0, 0, 0,
    0, 1, 0, 1, 0,
    0, 0, 0, 0, 0,
    0, 1, 1, 1, 0,
    0, 0, 0, 1, 0,
};

它表示一个迷宫,其中的1表示墙壁,0表示可以走的路,只能横着走或竖着走,不能斜着走,要求编程序找出从左上角到右下角的最短路线。
Input

一个5 × 5的二维数组,表示一个迷宫。数据保证有唯一解。
Output

左上角到右下角的最短路径,格式如样例所示。
Sample Input

0 1 0 0 0
0 1 0 1 0
0 0 0 0 0
0 1 1 1 0
0 0 0 1 0
Sample Output

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


我的代码~~#include<iostream.h>
int main()
{
    int maze[5][5];
    int i,j;
    for( i=0;i<5;i++)
        for( j=0;j<5;j++)
        {
            cin>>maze[i][j];
        }
    for(  i=0;i<5;i++)
        for(j=0;j<5;j++)
        {
            if (maze[i][j]=0)
            {
                cout<<"("<<i<<","<<j<<")";
            }
            if (maze[i][j]=1)
            {
             break;
            }
        
        }
return 0;
}
2013-03-20 20:08
yuccn
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:何方
等 级:版主
威 望:167
帖 子:6815
专家分:42393
注 册:2010-12-16
收藏
得分:3 
if (maze[i][j]=0) // ==? 下面一个if也是
             {
                 cout<<"("<<i<<","<<j<<")";
             }
             if (maze[i][j]=1)
             {
              break;
             }

我行我乐
公众号:逻辑客栈
我的博客:
https://blog.yuccn. net
2013-03-20 23:47
lihaibao1991
Rank: 1
等 级:新手上路
帖 子:7
专家分:3
注 册:2013-3-21
收藏
得分:3 
if (maze[i][j]==0)
             {
                 cout<<"("<<i<<","<<j<<")";
             }
             if (maze[i][j]==1)
             {
              break;
             }
如果是c++中if(...)里0 表示假,非零表示真所以一直是break。。。。
2013-03-21 21:17
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
收藏
得分:3 
LZ的算法貌似不能求出最优解啊!

埋骨何须桑梓地,人生无处不青山
2013-03-22 12:27
炼雪无痕
Rank: 1
等 级:新手上路
帖 子:8
专家分:6
注 册:2011-8-27
收藏
得分:3 
回复 2楼 yuccn
大神,应该怎么求出最优解???
2013-03-23 18:24
Agdmeg
Rank: 4
来 自:四川成都
等 级:业余侠客
威 望:3
帖 子:101
专家分:201
注 册:2011-8-9
收藏
得分:3 
下面程序能找到解。
TC中可以,VC中要出错
#include <stdio.h>
#include <conio.h>
struct point
{
    int x;
    int y;
};
struct point way[25];
int map[5][5];
int len;
void wtw(struct point,int);
struct point findnext(struct point);
int jud_p(struct point p);
int main ()
{
    int k,y,z;
    FILE *fp;
    struct point p_cur,p_next;
    p_cur.x=0;
    p_cur.y=0;
    wtw(p_cur,0);
    clrscr();
    fp=fopen("C:\\File\\12.txt","w");
    for(k=0;k<=4;k++)
    {
        scanf("%d %d %d %d %d",&map[k][0],&map[k][1],&map[k][2],&map[k][3],&map[k][4]);
    }
    if(fp==NULL)
    {
        printf("Open File Failed !\n");
    }
    else
    {
        for(y=0;y<=4;y++)
        {
            for(z=0;z<=4;z++)
            {
                fprintf(fp,"%d ",map[y][z]);
            }
            fprintf(fp,"\n");
        }
    }
    do
    {
        p_next=findnext(p_cur);
        if(((p_next.x)==0)&&((p_next.y)==0))
        {
            if(len<=0)
            {
                printf("No Way Been Found !\n");
                system("Pause");
                return 0;
            }
            map[p_cur.y][p_cur.x]=1;
            p_cur.x=way[len-1].x;
            p_cur.y=way[len-1].y;
            way[len].x=0;
            way[len].y=0;
            len=len-1;
        }
        else
        {
            wtw(p_next,len);
            p_cur.x=p_next.x;
            p_cur.y=p_next.y;
            printf("(%d,%d)\n",way[len].x+1,way[len].y+1);
            fprintf(fp,"(%d,%d)\n",way[len].x+1,way[len].y+1);
            getch();
        }
    }
    while(((way[len].x)!=4)||((way[len].y)!=4));
    printf("(1,1)->");
    for(k=1;k<=24;k++)
    {
        if(way[k].x!=0||way[k].y!=0)
            if(way[k].x!=4||way[k].y!=4)
                printf("(%d,%d)->",way[k].x+1,way[k].y+1);
            else
                printf("(%d,%d)",way[k].x+1,way[k].y+1);
    }
    printf("\n");
    fclose(fp);
    system("Pause");
    return 0;
}

struct point findnext(struct point poi)
    {
        struct point p;
        p.x=poi.x;
        p.y=poi.y;
        p.x=p.x+1;
        if((jud_p(p))||(p.x>4))
        {
            p.x=poi.x;
            p.y=poi.y;
            p.y=p.y+1;
            if((jud_p(p))||(p.y>4))
            {
                p.x=poi.x;
                p.y=poi.y;
                p.x=poi.x-1;
                if((jud_p(p))||(p.x<0))
                {
                    p.x=poi.x;
                    p.y=poi.y;
                    p.y=p.y-1;
                    if((jud_p(p))||(p.y<0))
                    {
                        p.x=0;
                        p.y=0;
                        return p;
                    }
                    else
                    {
                        len=len+1;
                        return p;
                    }
                }
                else
                {
                    len=len+1;
                    return p;
                }
            }
            else
            {
                len=len+1;
                return p;
            }
        }
        else
        {
            len=len+1;
            return p;
        }
    }

void wtw(struct point _p,int len)
    {
        way[len].x=_p.x;
        way[len].y=_p.y;
    }

int jud_p(struct point poin)
    {
        int i,m=0;
        if(map[poin.y][poin.x]==1)
        {
            m=1;
        }
        for(i=0;i<=24;i++)
        {
            if((way[i].x==poin.x)&&(way[i].y==poin.y))
            {
                m=2;
            }
        }
        return m;
    }
图片附件: 游客没有浏览图片的权限,请 登录注册


[ 本帖最后由 Agdmeg 于 2013-3-25 08:53 编辑 ]
2013-03-24 22:58
好聚好散
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:138
专家分:123
注 册:2012-12-4
收藏
得分:3 
查。。

无节操,无真相
2013-03-26 17:52
xiamomo
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2012-11-26
收藏
得分:0 
回复 6楼 Agdmeg
能简单说下深度搜索么?

菜鸟一个~~~~
2013-04-25 21:10
快速回复:迷宫 二维数组 输出不了?
数据加载中...
 
   



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

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