这是我第一次编程C ++,并且我被要求编写一个广泛的第一次搜索给定这个类
class route {
friend ostream& operator<<(ostream& os, const route& p);
public:
route(const string& startPlayer);
int getLength() const { return links.size(); };
void addConnect(const sport& s, const string& player);
void removeConnect();
const string& getLastPlayer() const;
private:
struct Connect {
sport s;
string player;
Connect() {}
Connect(const sport& s, const string& player) : s(s), player(player) {}
};
string startPlayer;
vector<Connect> links;
};
sport
是由string name
和int players
组成的结构。有人可以向我解释我如何制作BFS吗?
提前致谢!
编辑:
我理解BFS的算法,但由于我只编写了C,理解OO编程对我来说很混乱,鉴于接口,我从哪个BFS开始,我是否创建一个新函数使得BFS比较,start string
与target string
namespace {
string promptForSPlayer(const string& prompt, const spdb& db)
{
string response;
while (true) {
cout << prompt << " [or <enter> to quit]: ";
getline(cin, response);
if (response == "") return "";
vector<sport> splist;
if (db.getsplist(response, splist)) return response;
cout << "It's not here: \"" << response << "\" in the sports database. "
<< "Please try again." << endl;
}
}
}
int main(int argc, char *argv[])
{
if (argc != 2) {
cerr << "Usage: sports" << endl;
return 1;
}
spdb db(argv[1]);
if (!db.good()) {
cout << "Failed to properly initialize the spdb database." << endl;
cout << "Please check to make sure the start files exist and that you have permission to read them." << endl;
exit(1);
}
while (true) {
string start = promptForSplayer("Player", db);
if (start == "") break;
string target = promptForSplayer("Another Player", db);
if (target == "") break;
if (start == target) {
cout << "Good one. This is only interesting if you specify two different people." << endl;
} else {
// replace the following line by a call to your generateShortestPath routine...
cout << endl << "No path between those two people could be found." << endl << endl;
}
}
return 0;
}
答案 0 :(得分:4)
广度首先搜索是关于提出2个问题
这个想法是建立一个初始状态并不断问自己这两个问题直到
BFS通常使用一个Queue,你只需添加你找到的任何新状态,只要你想处理一个新状态并在队列末尾添加任何新状态,就可以从队列的前面弹出。
答案 1 :(得分:0)
路由类只是一种存储使用BFS找到的路由的机制。至少那是我解释它的方式。 BFS算法将是一个独立的函数,它将在适当的时间调用路由类的方法。由于BFS需要维护有关多个路由的信息,因此必须在某种列表或队列中创建多个路由对象。 BFS的每一步都将从队列中获取一个路由对象,复制它并在其上调用addConnect以移动到下一个位置,然后将其放回队列。重复直到到达目的地,然后从BFS函数返回表示最短路径的路径对象。
无论如何都是这样的。