Алгоритм мгновенного безумия с использованием теории графов - PullRequest
0 голосов
/ 18 октября 2019

Я пытаюсь создать алгоритм на C ++ для решения следующей головоломки:

У вас есть 4 куба. Куб имеет 6 граней. Каждое лицо четырех кубиков окрашено в красный, зеленый, синий или желтый цвет. Вы должны расположить кубы в столбце, где каждая сторона столбца имеет четыре разных цвета.

Я знаю решение головоломки в теории графов, которая заключается в использовании трехмерных кубов для создания2D сеть, из которой можно создать график, соответствующий каждому из 4 кубов. Затем объедините все четыре графика, чтобы создать один основной граф, из которого вы должны найти две 2-правильные псевдографы с непересекающимися ребрами.

Несмотря на то, что я знаю это решение теории графов, я не знаю, как перевести его в код C ++,Я начал с того, что спрашивал пользователя о цветах каждой из 6 граней каждого из 4 кубов, используя cout и cin. Затем я назначил эти пользовательские входные значения четырем массивам (по одному для каждого куба).

#include <iostream>
using namespace std;

int main() {
  cout << "There are four cubes." << " Enter the following values: " << endl << endl;

  string c_one_top, c_one_bottom, c_one_back, c_one_front, c_one_left, c_one_right;

  cout << "Cube 1, Top: ";
  cin >> c_one_top;
  cout << "Cube 1, Bottom: ";
  cin >> c_one_bottom;
  cout << "Cube 1, Back: ";
  cin >> c_one_back;
  cout << "Cube 1, Front: ";
  cin >> c_one_front;
  cout << "Cube 1, Left: ";
  cin >> c_one_left;
  cout << "Cube 1, Right: ";
  cin >> c_one_right;

  string c_one[7] = {c_one_top, c_one_bottom, c_one_back, c_one_front, c_one_left, c_one_right};

  cout << endl;

  string c_two_top, c_two_bottom, c_two_back, c_two_front, c_two_left, c_two_right;

  cout << "Cube 2, Top: ";
  cin >> c_two_top;
  cout << "Cube 2, Bottom: ";
  cin >> c_two_bottom;
  cout << "Cube 2, Back: ";
  cin >> c_two_back;
  cout << "Cube 2, Front: ";
  cin >> c_two_front;
  cout << "Cube 2, Left: ";
  cin >> c_two_left;
  cout << "Cube 2, Right: ";
  cin >> c_two_right;

  string c_two[7] = {c_two_top, c_two_bottom, c_two_back, c_two_front, c_two_left, c_two_right};


  cout << endl;

    string c_three_top, c_three_bottom, c_three_back, c_three_front, c_three_left, c_three_right;

  cout << "Cube 3, Top: ";
  cin >> c_three_top;
  cout << "Cube 3, Bottom: ";
  cin >> c_three_bottom;
  cout << "Cube 3, Back: ";
  cin >> c_three_back;
  cout << "Cube 3, Front: ";
  cin >> c_three_front;
  cout << "Cube 3, Left: ";
  cin >> c_three_left;
  cout << "Cube 3, Right: ";
  cin >> c_three_right;

  string c_three[7] = {c_three_top, c_three_bottom, c_three_back, c_three_front, c_three_left, c_three_right};

  cout << endl;

    string c_four_top, c_four_bottom, c_four_back, c_four_front, c_four_left, c_four_right;

  cout << "Cube 4, Top: ";
  cin >> c_four_top;
  cout << "Cube 4, Bottom: ";
  cin >> c_four_bottom;
  cout << "Cube 4, Back: ";
  cin >> c_four_back;
  cout << "Cube 4, Front: ";
  cin >> c_four_front;
  cout << "Cube 4, Left: ";
  cin >> c_four_left;
  cout << "Cube 4, Right: ";
  cin >> c_four_right;

  string c_four[7] = {c_four_top, c_four_bottom, c_four_back, c_four_front, c_four_left, c_four_right};

  cout << "Here's what you put: " << endl << endl;

  for (int i = 0; i <= 7; i++){
    cout<< c_one[i];
    cout<< c_two[i];
    cout<< c_three[i];
    cout<< c_four[i];
  }

  return 0;

}

Однако я застрял в этой точке. Возможно, создать матрицу смежности, которая представляет каждый из четырех графиков? А затем сложите четыре матрицы для создания мастер-графа? Но как мне сформулировать это в C ++?

...