[ad_1]
以下は C++ プログラムです。 Cに変換するのを手伝ってください。また、Linuxと互換性がある必要があります。
私が試したこと:
<pre>// A C++ program to print topological sorting of a DAG #include <iostream> #include <list> #include <stack> using namespace std; class Graph { int V; list<int> *adj; void topologicalSortUtil(int v, bool visited[], stack<int> &Stack); public: Graph(int V); void addEdge(int v, int w); void topologicalSort(); }; Graph::Graph(int V) { this->V = V; adj = new list<int>[V]; } void Graph::addEdge(int v, int w) { adj[v].push_back(w); } void Graph::topologicalSortUtil(int v, bool visited[], stack<int> &Stack) { visited[v] = true; list<int>::iterator i; for (i = adj[v].begin(); i != adj[v].end(); ++i) if (!visited[*i]) topologicalSortUtil(*i, visited, Stack); Stack.push(v); } void Graph::topologicalSort() { stack<int> Stack; // Mark all the vertices as not visited bool *visited = new bool[V]; for (int i = 0; i < V; i++) visited[i] = false; for (int i = 0; i < V; i++) if (visited[i] == false) topologicalSortUtil(i, visited, Stack); while (Stack.empty() == false) { cout << Stack.top() << " "; Stack.pop(); } } int main() { int n,v1,v2; cin>>n; Graph g(n); for(int i=1;i<=n;i++) { cin>>v1>>v2; g.addEdge(v1, v2);} cout << " Topological Sort of the given graph \n"; g.topologicalSort(); return 0; }
解決策 1
これはコード変換サービスではありません。コードを翻訳するためにここにいるわけではありません。
仮にそうしたとしても、最終的にターゲット言語の「良いコード」にはなりません。それらは非常に異なるフレームワークに基づいており、ある言語で何かを機能させるものが必ずしも別の言語に直接「翻訳」されるとは限りません。
そのため、最終的には非常に貧弱なコードになり、メンテナンスが不可能ではないにしても難しく、適切にアップグレードできず、元のコードが変更された場合に大きな頭痛の種になります。 そして、「箱から出してすぐに」機能しない場合、デバッグするのは悪夢です。
代わりに、ソース コードを新しいアプリの仕様とターゲット言語/フレームワークの仕様として使用し、オリジナルを “テンプレート” として使用してゼロから記述します。 はるかに優れた結果が得られ、長期的には多くの時間を節約できます。
正直なところ、そのコードの C++ 固有の機能を C で動作させるには、非常に多くの作業を行う必要があり、完了するまでに宿題の締め切りはとっくに過ぎていたでしょう。 また、コードは、関連する「ネイティブ C」プログラムよりもおそらく数百倍大きくなります。
解決策 2
これは初心者向けの演習ではありませんので、ある程度の経験があることを前提としています。 このサイト[^] C++ と C ライブラリの両方をカバーしているため、役立つはずです。
各 #include
は C++ STL からのものであるため、それらを削除した後にコードを機能させる必要があります。 したがって、Cの同等物が必要です iostream
、 stack
、 list
、および (メモリの割り当て用) new
.
に相当する C iostream
は stdio.h
、代わりを見つける必要がある場所 cin
と cout
.
に相当する C new
は malloc
. 元のコードは気にしません delete[]
それが割り当てる配列ですが、それと同等のCは free
拡張機能として追加する場合。
スタックとリスト (双方向リンク リスト) を実装するには、十分な経験が必要です。 スタックは関数をサポートする必要があります empty
、 top
、 push
、 と pop
. あなたのリストは機能をサポートする必要があります push_back
、 begin
、 と end
. 不思議なことに、元のコードは vector
、これらの関数もサポートしていますが、より単純です (動的に拡張可能な配列のみ)。
どのオペレーティング システムにも固有のものは見当たりません。そのため、概要を説明した作業が完了すると、コードは Linux、Windows、またはどこでも正常に動作するはずです。
解決策 3
// map ライブラリは、C++ コードで map を使用するために含まれています
#含む
[ad_2]
コメント