C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

4色問題の実装を示すC++プログラム


これは、4色問題の実装を示すためのC++プログラムです。

アルゴリズム

Begin
   Develop function issafe() to check if the current color assignment
   is safe for vertex v i.e. checks whether the edge exists or not.
   If it exists,
      then next check whether the color to be filled in the new vertex is already used by its adjacent vertices.
End
Begin
   Function graphColoringtil(bool graph[V][V], int m, int col[], int v)
   solve 4 coloring problem:
   Here,
   g[V][V] = It is a 2D array where V is the number of vertices in graph
   m = maximum number of colors that can be used.
   col[] = an color array that should have numbers from 1 to m.
   if v == V
      return true
   For c = 1 to m
      if (isSafe(v, g, col, c))
         col[v] = c
         if (graphColoringtil (g, k, col, v+1) == true)
            return true
         col[v] = 0
   return false
End

Begin
   function graphColor():
      It mainly uses graphColoringUtil() to solve the problem.
         It returns false if the m colors cannot be assigned,
            otherwise return true.
End

#include <iostream>
#include <cstdio>
#define V 5
using namespace std;
bool isSafe (int v, bool graph[V][V], int col[], int C) {
   for (int i = 0; i < V; i++)
   if (graph[v][i] && C == col[i])
   return false;
   return true;
}
bool graphColoringtil(bool g[V][V], int k, int col[], int v) {
   if (v == V) //If all vertices are assigned a color then
   return true;
   for (int c = 1; c <= k; c++) { //Consider this vertex v and try different colors
      if (isSafe(v, g, col, c)) { //Check if assignment of color c to v is fine
         col[v] = c;
         if (graphColoringtil (g, k, col, v+1) == true) //recur to assign colors to rest of the vertices
            return true;
         col[v] = 0; //If assigning color c doesn't lead to a solution then remove it
      }
   }
   return false;
}
void solution(int color[]) {
   cout<<"The assigned colors are: \n";
   for (int i = 0; i < V; i++)
      cout<<color[i];
   cout<<"\n";
}
bool graphColor(bool graph[V][V], int k) {
   int *color = new int[V];
   //initialize all colors value as 0
   for (int i = 0; i < V; i++)
   color[i] = 0;
   if (graphColoringtil(graph, k, color, 0) == false) {
      cout<<"Solution does not exist";
      return false;
   }
   solution(color);
   return true;
}
int main() {
   bool g[V][V] = {
      {0, 0, 1, 0,1},
      {1, 1, 1, 0,0},
      {1, 1, 0, 0,1},
      {0, 1, 1, 0,0}
   };
   int k= 4;
   graphColor(g, k);
   return 0;
}

出力

The assigned colors are:
1 2 3 1 1

  1. チームメンバーのインデックスのシーケンスを見つけるためのC++プログラム

    n個の要素と数kの配列Aがあるとします。クラスにはn人の生徒がいます。 i番目の学生の評価はA[i]です。すべてのチームメンバーの評価が明確になるように、k人の学生でチームを形成する必要があります。不可能な場合は「不可能」を返し、そうでない場合はインデックスのシーケンスを返します。 したがって、入力がA =[15、13、15、15、12]のような場合; k =3の場合、出力は[1、2、5]になります。 ステップ これを解決するには、次の手順に従います- Define two large arrays app and ans and fill them with cnt := 0 n :=

  2. グラフ内のスーパー頂点を見つけるためのC++プログラム

    n個の頂点を持つグラフが与えられたとします。頂点には1からnの番号が付けられ、配列edgesで指定されたエッジによって接続されます。各頂点には、配列valuesで指定された1からnまでの数値内のx値があります。ここで、グラフからスーパー頂点を見つける必要があります。頂点1からiへの最短経路にi番目の頂点と同じ「x」値を持つ頂点がない場合、頂点iは「スーパー頂点」と呼ばれます。この基準を満たすすべての頂点を印刷します。 したがって、入力がn =5のようである場合、値={1、2、2、1、3}、エッジ={{1、2}、{2、3}、{2、3}、{2、4 }、{4、5}}の場合、出力は1 345に