向函数传递参数时出错
Error in passing aurguements to a function
这是一种标准化的代码算法,称为dijsktra算法。但是它在调用dijsltra函数时给了我一个错误,如下所示
error: cannot convert 'int (*)[(((sizetype)(((ssizetype)n) + -1)) + 1)]' to 'int (*)[9]' for argument '1' to 'void dijkstra(int (*)[9], int)
我的代码是
#include<iostream>
using namespace std;
#define inf 999;
const int V=0;
int minDistance(int dist[], bool sptSet[])
{
int min=inf;
int min_index;
for (int v = 0; v < V; v++)
{
if ((sptSet[v] == false) &&(dist[v] <= min) )
min = dist[v];
min_index = v;
}
return min_index;
}
void dijkstra(int graph[V][V], int src)
{
int dist[V];
bool sptSet[V];
for (int i = 0; i < V; i++)
{
dist[i] = inf;
sptSet[i] = false;
}
dist[src] = 0;
for (int count = 0; count < V-1; count++)
{
int u = minDistance(dist, sptSet);
sptSet[u] = true;
for (int v = 0; v < V; v++)
{
if (!sptSet[v] && graph[u][v] && dist[u] != 999 && (dist[u]+graph[u][v] < dist[v]))
{
dist[v] = dist[u] + graph[u][v];
}
}
}
}
int main()
{
int size;
int n;
cin>>n;
size=n;
int matrix[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)
{
if((j+1==i+2)||(j+1==3*(i+1)))
matrix[i][j]=1;
else
matrix[i][j]=0;
}
}
dijkstra(matrix,0);
cout<<matrix[0][n-1]<<endl;
}
开头有const int V = 0;
,并将其用作dijkstra中的int graph[V][V]
参数。在你的主函数中,你用矩阵[n][n]调用dijkstra,它最有可能不是V。
我不是专家,但我会尝试这样做:
#include <iostream>
void dijkstra(int** &matrix, int n)
{
int count = 0;
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
matrix[i][j] = count++;
}
}
}
int main()
{
int n;
std::cin >> n;
int** matrix = new int*[n];
for (int i = 0; i<n; i++)
{
matrix[i] = new int[n];
}
dijkstra(matrix, n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
std::cout << matrix[i][j] << std::endl;
}
}
}
动态创建二维数组。int**
是指向指针的指针,对于每个指针(*),您使用new
创建一个整数数组。现在将这个pointer of pointer
对象作为引用传递给函数(这就是为什么dijkstra函数的参数中有&
)。现在您可以像往常一样使用矩阵了,您可以在最后的main函数中打印结果。
相关文章:
- 为 NewObjectA() 函数创建 jvalues 的参数数组时出错 - JNI Invocation API
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- 使用一个参数的模板函数时出错(适用于 2)
- 为什么在函数参数前面添加 const 会出错?
- 变量用作C中的函数参数后出错
- 将私有数据成员作为默认参数传递给该类的公共方法时出错
- 使用 cvThreshold 时报告参数时出错
- STL 容器在函数中作为模板参数,在调用中出错
- 使用模板模板参数时出错
- 方法的参数列表出错
- 将 std::bind 应用于带有参数 <boost::asio::ip::tcp::socket> 时出错?
- 使用模板函数传递模板参数时出错
- 在 c++ 中调用将字符串作为参数传递的函数时出错
- 在运算符中将联合作为参数传递时出错<<
- 在C 中使用Caffe;无法将Caffe ::求解参数仪发挥作用而不会出错
- 尝试使用浮点参数运行重载函数时出错
- C++ 在C++中通过引用将枚举作为默认参数传递时出错
- C++输入重定向导致文件参数工作时出错
- 将非静态函数作为参数传递时出错
- Win32 窗口包装器出错(参数不正确)