主.cpp:63:12:错误:从 'int (*)[4]' 到 'int' [-允许] 的转换无效。我做错了什么?

main.cpp:63:12: error: invalid conversion from 'int (*)[4]' to 'int' [-fpermissive]. What am I doing wrong?

本文关键字:int 无效 转换 允许 什么 错了 错误 cpp      更新时间:2023-10-16
#include <stdio.h>
#include <limits.h>
#include <iostream>
#define V 5
using namespace std;
void dfs(int ,int );
int kante(int, int);//edge
int G[V][V];// Graph
int i;
int mark[10];// mark the vertex, if it's been visited
int S[V]; // Stack, with the nodes
int ps; // counter of nodes in S
int j,Kn; 
int l;
void dfs(int G,int k){
    for(int j=1; j<=V; j++)
       mark[j]=0; // initialise all nodes as unvisited
S[1]=k;  // starting node=k
ps=1; // S has one element
while(ps>0){
    Kn==S[ps]; 
    for(int i=1;i<=V;i++){// check for neighbour
        if (mark[i]==1) ps=ps-1; // already visited-->delete the node from S
        else
            if(mark[i]==0)// not visited
            {
                if ((G[i][Kn]!=0) || (G[Kn][i]!=0)){// Kn adjacent with i
                    dfs(G,i); // do the same for node i
                    mark[i]=1; // mark it as visited
                    ps++;
                    S[ps]=i; // put it in stack
                }
            }
    }
   }
   }

int main(){
int G[4][4]={{0,1,1,0},
             {0,0,1,0},
             {1,0,0,1},
             {0,0,0,1},
};
cout<<"Tiefensuche, startknoten 0:n"<<endl; // DFS, starting node
dfs(G,0); // applied dfs on starting node 0 

return 0;
}

我不明白为什么这不起作用。此代码应通过访问所有节点来深度遍历图形。如何重新定义图(矩阵(,以便它可以作为参数传递给函数 dfs。我收到以下错误:

main.cpp:42:29: error: invalid types 'int[int]' for array subscript
                     if ((G[i][Kn]!=0) || (G[Kn][i]!=0)){
                             ^
main.cpp:42:47: error: invalid types 'int[int]' for array subscript
                     if ((G[i][Kn]!=0) || (G[Kn][i]!=0)){
                                               ^
main.cpp: In function 'int main()':
main.cpp:63:12: error: invalid conversion from 'int (*)[4]' to 'int' [-fpermissive]
     dfs(G,0); 
            ^
main.cpp:30:6: note:   initializing argument 1 of 'void dfs(int, int)'
 void dfs(int G,int k){

您在dfs中使用G作为 2D 数组。函数的声明应反映这一点。而不是

void dfs(int ,int );

void dfs(int (*G)[4], int k);