Dev c++ 出现如下错误 求大神告知

JonyShan 2016-03-03 08:46:28
C:\Users\ADMINI~1\AppData\Local\Temp\ccSPaggl.o BFS迷宫.cpp:(.text+0x47): undefined reference to `Bfs(Node, Node)'
E:\算法练习\算法集锦\collect2.exe [Error] ld returned 1 exit status
也没说是哪行 不知打怎么改
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#define MAXL 4
using namespace std;


struct Node
{
int x,y;
Node(int x=0,int y=0) : x(x),y(y) {}; //构造函数或者写成Node(int x=0,int y=0) { this->x = x;this->y = y; }
};
bool Bfs(Node Vs,Node Vd);
int mg[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};

int main()
{
Node Vs(0,0),Vd(4,4);
if(Bfs(Vs,Vd))
cout << Vs.x;
cout <<"yes";
}

int isValid(struct Node& Vw)
{
if(!mg[Vw.x][Vw.y])
return 1;
else return 0;
}
/**
* 广度优先搜索
* @param Vs 起点
* @param Vd 终点
*/

int Bfs(Node& Vs, Node& Vd){
queue<Node> Q;
Node Vn, Vw;
int i;

//用于标记颜色当visit[i][j]==true时,说明节点访问过,也就是黑色
bool visit[MAXL][MAXL];

//四个方向
int dir[][2] = {
{0, 1}, {1, 0},
{0, -1}, {-1, 0}
};

//初始状态将起点放进队列Q
Q.push(Vs);
visit[Vs.x][Vs.y] = true;//设置节点已经访问过了!

while (!Q.empty()){//队列不为空,继续搜索!
//取出队列的头Vn
Vn = Q.front();
Q.pop();

for(i = 0; i < 4; ++i){
Vw = Node(Vn.x+dir[i][0], Vn.y+dir[i][1]);//计算相邻节点

if (Vw.x == Vd.x && Vw.y == Vd.y){//找到终点了!
//把路径记录,这里没给出解法
return 1;//返回
}

if (isValid(Vw) && !visit[Vw.x][Vw.y]){
//Vw是一个合法的节点并且为白色节点
Q.push(Vw);//加入队列Q
visit[Vw.x][Vw.y] = true;//设置节点颜色
}
}
}
return 0;//无解
}
...全文
696 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiantoushi 2017-11-28
  • 打赏
  • 举报
回复
你看一眼工具里的编译器选项里的编译器配置里的32bit,还是64bit
a289038273 2016-03-03
  • 打赏
  • 举报
回复
这两天天天遇到这种错误。 解决方法就是把所有代码复制,粘贴在一个新的源代码,在编译就正确了。 如果对了给分啊。
yshuise 2016-03-03
  • 打赏
  • 举报
回复
能编译通过
#include <iostream>

/* run this program using the console pauser or add your own getch, system("pause") or input loop */
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<queue>
#define MAXL 4
using namespace std;
 
 
struct Node
{
    int x,y;
    Node(int x=0,int y=0) : x(x),y(y)    {};             //构造函数或者写成Node(int x=0,int y=0) { this->x = x;this->y = y; } 
};
// bool Bfs(Node& Vs,Node& Vd);
int mg[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};
 
//int main()
//{
//    Node Vs(0,0),Vd(4,4);
//    if(Bfs(Vs,Vd))
//    cout << Vs.x;
//        cout <<"yes";
//} 
 
int isValid(struct Node& Vw)
{
    if(!mg[Vw.x][Vw.y])
        return 1;
    else return 0;
}
/**
 * 广度优先搜索
 * @param Vs 起点
 * @param Vd 终点
 */
  
int  Bfs(Node& Vs, Node& Vd){
    queue<Node> Q;
    Node Vn, Vw;
    int i;
 
    //用于标记颜色当visit[i][j]==true时,说明节点访问过,也就是黑色
    bool visit[MAXL][MAXL];
 
    //四个方向
    int dir[][2] = {
        {0, 1}, {1, 0},
        {0, -1}, {-1, 0}
    };
 
    //初始状态将起点放进队列Q
    Q.push(Vs);
    visit[Vs.x][Vs.y] = true;//设置节点已经访问过了!
 
    while (!Q.empty()){//队列不为空,继续搜索!
        //取出队列的头Vn
        Vn = Q.front();
        Q.pop();
 
        for(i = 0; i < 4; ++i){
            Vw = Node(Vn.x+dir[i][0], Vn.y+dir[i][1]);//计算相邻节点
 
            if (Vw.x == Vd.x && Vw.y == Vd.y){//找到终点了!
                //把路径记录,这里没给出解法
                return 1;//返回
            }
 
            if (isValid(Vw) && !visit[Vw.x][Vw.y]){
                //Vw是一个合法的节点并且为白色节点
                Q.push(Vw);//加入队列Q
                visit[Vw.x][Vw.y] = true;//设置节点颜色
            }
        }
    }
    return 0;//无解
}
int main(int argc, char** argv) {
	Node Vs(0,0),Vd(4,4);
    if(Bfs(Vs,Vd))
    cout << Vs.x;
        cout <<"yes";
	return 0;
}
yshuise 2016-03-03
  • 打赏
  • 举报
回复
Bfs函数声明和定义不一样哦
JonyShan 2016-03-03
  • 打赏
  • 举报
回复
改过了还是不行啊

64,653

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧