Keresés


Toplista

Toplista
  • betöltés...

Magántanár kereső

Ha szívesen korrepetálnál, hozd létre magántanár profilodat itt.
Ha diák vagy és korrepetálásra van szükséged, akkor regisztrálj be és írd meg itt, hogy milyen tantárgyban!

Hogyan tudom kiíratni az összes megoldást? C++

187
Nos röviden a program egy gráf szinezése , megvan adva a gráf előre definiálva de csak addig jutottam hogy egy kompoziciót tud csak ki iratni ...
A feladat
Szinezzük ki úgy az országokat (gráf csúcsok), hogy két szomszédos ország ne legyen egyforma szinnel kiszinezve.

Implementaljuk 3 csucs es 4 szin felhasználásával

ami eddig megvan :
https://pastebin.com/xfeSN8FZ


#include <bits/stdc++.h>
using namespace std;

// A graf csucsainak a szama
#define V 3

void printMegoldas(int szin[]);

// Megnezi ha a graph okes vagy sem
bool ezBiztonsagos(int v, bool graph[V][V], int szin[], int c)
{
for (int i = 0; i < V; i++)
if (graph[v][i] && c == szin[i])
return false;

return true;
}

//Segedfunkcio a szinezes megoldasara
bool graphSzinezes(bool graph[V][V], int m, int szin[],
int v)
{

//Ha minden csucs szint rendel akkor igazat kapunk
if (v == V)
return true;

//tekintsuk a csucsot v-nek es probaljunk ki mas szineket
for (int c = 1; c <= m; c++) {

//Megvizsgalja c-tol v ig a szineket hogy rendben van
if (ezBiztonsagos(v, graph, szin, c)) {
szin[v] = c;

//ugyan ugy a tobbi csucsra is
if (graphSzinezes(graph, m, szin, v + 1)
== true)
return true;

//Ha a c-hez nem kap megoldast akkor tavolitsa el
szin[v] = 0;
}
}

//Ha nem lehet szint hozza rendelni hamis erteket terit vissza
return false;
}

//
bool graphSzin(bool graph[V][V], int m)
{

// Alapbol minden szin erteke 0
// Szukseges ahhoz hogy az ezbiztonsagos reszlet helyesen mukodjon
int szin[V];
for (int i = 0; i < V; i++)
szin[i] = 0;

// Meghivja a graph szinezest az elso elre
if (graphSzinezes(graph, m, szin, 0) == false) {
cout << "Nincs megoldas";
return false;
}

// Kiirja a megoldast
printMegoldas(szin);
return true;
}

//Kiiratas
void printMegoldas(int szin[])
{
cout << "Talalt megoldast: \n "
<< "A szinezes a kovetkezo:"
<< "\n";
for (int i = 0; i < V; i++)
cout << " " << szin[i] << " ";

cout << "\n";
}


int main()
{

bool graph[V][V] = {
{ 0, 1, 1,},
{ 1, 0, 1,},
{ 1, 1, 0,},

};

// A szinek szama
int m = 4;
graphSzin(graph, m);
return 0;
}
Jelenleg 1 felhasználó nézi ezt a kérdést.
informatika, c++, programozás
0
Felsőoktatás / Informatika

Válaszok

0