| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 525 人关注过本帖
标题:这一个迷宫的程序我标志的地方有错误,问下错哪里,
只看楼主 加入收藏
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
结帖率:69.23%
收藏
已结贴  问题点数:10 回复次数:6 
这一个迷宫的程序我标志的地方有错误,问下错哪里,
我初学的是c语言,c++还没有学,所以一些语法方面的不是很懂,所以就来问下了,


#include<iostream>
#include<queue>
using namespace std;
#define MAX_N 200
#define MAX_M 200
const int INF = 100000000;
//使用pair表示状态,使用typedef
//会更加方便一点
typedef pair<int, int> p;
//4G个方向移动的距离
int dx[4] = {
    1, 0, -1, 0
};
int dy[4] = {
    0, 1, 0, -1
};
//全局待输入的变量
char maze[MAX_N][MAX_M + 1];
int n, m;
int sx, sy;
int gx, gy;
int d[MAX_N][MAX_M];
//求从(sx,sy)到(gx,gy)的最短距离
int bfs(int n, int m, int sx, int sy, int gx, int gy)
{
    queue<p> que;
    //把所有位置都初始化为INF
    for (int i = 0; i<n; i++)
    for (int j = 0; j<m; j++)
        d[i][j] = INF;
    //将起点加入队列,并把这一地点的距离
    //设置为0
    que.push(p(sx, sy));---------------------------这一句有错,就是如何创建一个队列节点方便入入列?
    d[sx][sy] = 0;
    //不断循环直到队列的长度为0
    while (que.size()){
        //从队列的最前端取出元素
        p p = que.front();
        que.pop();
        //如果取出的状态已经是终点,则结束搜索
        if (p.first == gx && p.second == gy)
            break;
        //四个方向循环
        for (int i = 0; i<4; i++){
            int nx = p.first + dx[i];
            int ny = p.second + dy[i];
            //判断是否可以移动以及是否已经访问过
            //d[nx][ny]!=INF即为已经访问过
            if (0 <= nx && nx<n && 0 <= ny && ny<m && maze[nx][ny] != '#' && d[nx][ny] == INF)
            {//可以移动的话,则加入队列,并且到该位置的距离确定为到p的距离+1
                que.push(p(nx, ny));---------------------------------------------这一句有错
                d[nx][ny] = d[p.first][p.second] + 1;
            }
        }
    }
    return d[gx][gy];
}
int main()
{
    int count = 0;
    scanf("%d%d", &n, &m);
    for (int i = 0; i<n; i++)
    for (int j = 0; j<m; j++)
        scanf_s("%c", &maze[i][j]);

    scanf("%d%d%d%d", &sx, &sy, &gx, &gy);
    count = bfs(n, m, sx, sy, gx, gy);
    return 0;
}
搜索更多相关主题的帖子: include c语言 
2015-06-07 22:40
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:10 
不知道题目要求是什么

que.push(p(sx, sy));//---------------------------这一句有错,就是如何创建一个队列节点方便入入列?
--- 没有错

que.push(p(nx, ny));//---------------------------------------------这一句有错
--- 因为之前的代码改变了p的含义,见 p p = que.front();
2015-06-08 09:03
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
那一句p p = que.front();
前一个p是表示什么?

这个错误能不能直接给说下怎么改?
c语言加入队列直接调用一个函数EnQueue(q,e)
就可以了,
c++的语法实在不熟悉?
2015-06-09 17:02
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
回复 2楼 边小白
我觉得是定义数组吧
有两个元素的数组,
也是没学过。
2015-06-09 17:02
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
回复 3楼 rjsp
那一句p p = que.front();
前一个p是表示什么?

这个错误能不能直接给说下怎么改?
c语言加入队列直接调用一个函数EnQueue(q,e)
就可以了,
c++的语法实在不熟悉?
2015-06-09 17:03
NeQhk
Rank: 2
等 级:论坛游民
威 望:1
帖 子:164
专家分:85
注 册:2014-7-19
收藏
得分:0 
回复 3楼 rjsp
还是不太懂
错误是这样子的not match for call to (p)(int&,int&)。。。
2015-06-09 17:57
快速回复:这一个迷宫的程序我标志的地方有错误,问下错哪里,
数据加载中...
 
   



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

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