2016-05-18 7 views
-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){ 
+2

あなたの関数は、パラメータ 'G'は' int'であることを宣言しますが、あなたはタイプ 'int型の引数を持つ関数を呼び出している[4]の[4] '。それは意味をなさない。 –

答えて

0

あなたはdfsで2次元配列としてGを使用しています。関数の宣言はそれを反映する必要があります。代わりに

void dfs(int ,int); 

使用

void dfs(int (*G)[4], int k); 
関連する問題