-4
#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:63:12:エラー: 'int(*)[4]'から 'int' [-fpermissive]への変換が無効です。私は間違って何をしていますか?
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){
あなたの関数は、パラメータ 'G'は' int'であることを宣言しますが、あなたはタイプ 'int型の引数を持つ関数を呼び出している[4]の[4] '。それは意味をなさない。 –