实现 graph 时未解析的重载函数类型 [int]
unresolved overloaded function type [int] when implementing graph
我尝试实现图形bfs,但得到编译器错误错误:
invalid types '<unresolved overloaded function type>[int]' for array subscript|
我的问题:
- 我的方法制作结构向量数组是正确的方法吗?我该如何解决编译器错误?
- 如何将数组值初始化为无穷大?
- 制作无向图时,我应该推回 2 次吗?
我的代码:
#include <iostream>
#include <deque>
#include <vector>
#define INT_MAX 21422
using namespace std;
int distancee[10]={4,4,4,4,4,4,4,4,4,4}; //want to intialize all to infinity
struct bfss{
int firstt;
int secondd;
};
vector<bfss>bfs[10];
void bfsfunc(int start){
deque<int> q;
q.push_back(start);
distancee[start]=0;
while(!q.empty()){
int v=q.front();
q.pop_front();
for(int i=0;i<bfs[v].size();i++){
if(distance[bfs[v][i].firstt]>(distance[v]+bfs[v][i].secondd)){ // got error in this line
distance[bfs[v][i].firstt]=distance[v]+bfs[v][i].secondd;
if(bfs[v][i].second==0)
{
q.push_front(bfs[v][i].first);
} else {
q.push_back(bfs[v][i].second);
}
}
}
}
}
int main()
{
int edges,nodes,x,y,z;
cin>>edges>>nodes;
for(int i=0;i<edges;i++){
cin>>x>>y>>z; //x is array subscript , y is node(x-y is edge) , z is weight
bfss newbfs;
newbfs.firstt=y;
newbfs.secondd=z;
bfs[x].push_back(newbfs);
bfss newbfs;
newbfs.firstt=x;
newbfs.secondd=z;
bfs[y].push_back(newbfs); // when making undirected graph, should i push back 2 times?
}
bfsfunc(0);
return 0;
}
如前所述,您在距离、第一和第二上有一些错别字。修复这些,错误就会消失。对于一个int
来说,你最接近无穷大是它的最大值。有了这个和其他一些小的更改(代码中的注释),这就是我想出的:
#include <iostream>
#include <deque>
#include <vector>
#include <array>
#include <limits> // std::numeric_limits
// removed using namespace std;
// max distance: not infinity, but hopefully large enough
constexpr int md = std::numeric_limits<int>::max();
// replaced the C array with a standard C++ array
std::array<int, 10> distancee={md,md,md,md,md,md,md,md,md,md};
struct bfss { // shouldn't these be unsigned?
int firstt;
int secondd;
};
std::vector<std::vector<bfss>> bfs(10); // replaced C array with a standard C++ vector
void bfsfunc(int start) {
std::deque<int> q;
q.push_back(start);
distancee[start]=0;
while(!q.empty()) {
int v=q.front();
q.pop_front();
// using size_t intstead of int for array subscript
for(size_t i=0;i<bfs[v].size();i++) {
if(distancee[bfs[v][i].firstt]>(distancee[v]+bfs[v][i].secondd)) {
distancee[bfs[v][i].firstt]=distancee[v]+bfs[v][i].secondd;
if(bfs[v][i].secondd==0) {
q.push_front(bfs[v][i].firstt);
} else {
q.push_back(bfs[v][i].secondd);
}
}
}
}
}
int main()
{
int edges,nodes,x,y,z;
std::cin>>edges>>nodes;
for(int i=0;i<edges;i++) {
std::cin>>x>>y>>z; //x is array subscript , y is node(x-y is edge) , z is weight
// using emplace_back to let the vector create the bfss in place
bfs[x].emplace_back(bfss{y, z});
bfs[y].emplace_back(bfss{x, z});
}
bfsfunc(0);
return 0;
}
我不知道关于推送两次的问题的答案,因为我不知道算法。
相关文章:
- 特征::矩阵<双精度,1,3> 结构类型函数中的返回类型函数
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 这里有一个返回 (24) 的布尔返回类型函数
- 使用SFINAE来检测void返回类型函数的存在
- 使用此类型函数有什么优势
- 为什么此函数通过类型函数指针调用后,呼叫明智地行为
- 如何使用无类型函数指针调用C++成员函数
- 模板返回类型函数如何在C++中工作
- 具有通用类型函数的动态库[C ]
- 如何在返回类型函数模板的专用化中使用派生类型?( "couldn't infer template argument" )
- Bon appetit :从 int 返回类型函数在 main() 中打印字符串
- 对于需要其他模板参数的类型函数的部分模板专业化
- c++错误的参数类型-函数指针
- 延迟评估模板类型函数
- 在引用或指针返回类型函数上输入
- 具有指针数据类型的非类型函数模板参数
- STL中使用的C++自定义比较类型(函数谓词与较少结构)
- C++模板基类的非类型函数模板的 using 声明
- 字符串到类型函数,模板专用化使调用统一
- 自由类型函数可以接受 Unicode 文件名吗?