向函数传递参数时出错

Error in passing aurguements to a function

本文关键字:出错 参数 函数      更新时间:2023-10-16

这是一种标准化的代码算法,称为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函数中打印结果。