2016-08-12 13 views
-2
#include <stdio.h> 

struct graph{ 
int v,e,**adj; 
}; 

struct graph* graph_A(){ 
int u,V,i; 
struct graph *g = (struct graph*)malloc(sizeof(struct graph)); 
if(!g){ 
printf("error ! "); 
exit(1); 
} 

printf("Enter no of nodes and edges ? "); 
scanf("%d, %d",&g->v,&g->e); 
g->adj = (int**)malloc(sizeof(int) * sizeof(g->v * g->v)); 
for(u = 0 ; u <= g->v ; u++) 
for(V = 0 ; V <= g->v ; V++) 
g->adj[u][V] = 0; 
printf("Enter connections ? "); 
for(i = 0 ; i <= g->e ; i++){ 
scanf("%d, %d",&u,&V); 
g->adj[u][V] = 1; 
g->adj[V][u] = 1; 
} 
    return (g); 
} 
int main(){ 
graph_A(); 
    } 

私はこの問題を解明しようとしていますが、自分では解決できません。助けてください ! 私はこのトピックについて約2時間調査しましたが、残念なことに、何も見つかりませんでした 適切なヘルプデスク。 私はデータ構造を学び、cおよびC++言語で実装しています。 あなたが本当にあなたのようなものであることを助けることができるなら私に を教えてください。感謝! ありがとう!グラフ内の隣接行列(エラーが発生している)

+2

はC '中で、私に何かを知らせる++'、なぜあなたはmalloc関数が必要なのでしょうか? –

+2

'if(g){ cout <<" error "; exit(1); } ':allocが成功するとエラーになります。そしてもっと重要なのはなぜあなたのクラスのメモリをクラスに割り当てるのですか? –

+0

非ポッド用のmallocを使用しています...それはうまく終わることができます... – Borgleader

答えて

0

ベクターを使用してコードをわずかに修正しました。オートループの不使用、変数の悪い選択、ユーザー入力の境界チェックがないために最もきれいな方法ではありませんが、少なくともそれは機能します。 割り当てを完全に削除し、ベクトルで置き換えました。コードはそれほど変わらなかった。

クラスは不要です。すべてがメインそのもので実行されている可能性があります。クラスを作成する場合は、インタラクティブな入力ではなくコンストラクタでパラメータを指定します(他の人が他の目的でクラスを再利用できるようにメインで行います)。それは後で来るだろう。

  • インスタンスのmalloc関数コンストラクタ自体の内部:主な懸念た

    。 newを使用すると、無限の再帰が作成されていました。私のアドバイス:いくつかのC++の本を読む

  • すべてのループには上限境界が含まれています
  • ポインタ行のポインタは割り当てられていますが、行自体は割り当てられていません。

私は、コードを書き直したとき、私はそれがすぐに働いた後のことを、理由表示部の最後の上限境界エラーの2つのコンパイルエラー、1つのSEGVを持っていました。 C++のルール(あなたの周りにあなたの方法を知っているとき)

コード:

#include <iostream> 
#include <cstdlib> 
#include <vector> 
using namespace std; 

class graph{ 
int v,e; 
vector<vector<int> > adj; 
public: 
graph(); 
}; 

graph::graph() 
{ 

int u,V,i; 
cout << "Enter no of nodes and edges ? "; 
cin >> v ; 
cin >> e ; 
adj.resize(v); 
for(u = 0 ; u < v ; u++) 
{ 
    adj[u].resize(v); 
} 

for(u = 0 ; u < v ; u++) 
for(V = 0 ; V < v ; V++) 
adj[u][V] = 0; 
cout << " Enter connections ? "; 
for(i = 0 ; i < e ; i++){ 
cin >> u ; 
cin >> V ; 
adj[u][V] = 1; 
adj[V][u] = 1; 
} 
for(u = 0 ; u < v ; u++) 
{ 
for(V = 0 ; V < v ; V++) 
{ 
cout << adj[u][V] << " "; 
} 
cout << endl; 
} 
} 


int main(){ 

graph a; 
return 0; 
} 

テスト:

Enter no of nodes and edges ? 10 3 
Enter connections ? 3 4 
2 3 
4 5 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 1 0 0 0 0 0 0 
0 0 1 0 1 0 0 0 0 0 
0 0 0 1 0 1 0 0 0 0 
0 0 0 0 1 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 0 
関連する問題