Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // floyd.cpp: определяет точку входа для консольного приложения.
- //
- #include "stdafx.h"
- #include "Helper.h"
- const char* mainMenu[3] = { "Запустити програму", "Про програму", "Вихiд" };
- const char* printMenu[2] = { "Результат на консоль", "Результат у файл" };
- const char* workMenu[4] = { "Прочитати консоль", "Прочитати файл", "Розрахувати", "Вихiд" };
- const int MAX = 50;
- int* d[MAX];
- int c[MAX][MAX];
- int n = MAX;
- int A, B, C, D;
- bool ready = false;
- vector<int> answ;
- void getPath(int i, int j, vector<int> &v) {
- if (i == j) {
- v.push_back(j + 1);
- }
- else {
- getPath(i, c[i][j], v);
- v.push_back(j + 1);
- }
- }
- void work() {
- int p = 0;
- bool reReaded = false;
- do {
- p = showMenu(workMenu, 4);
- switch (p) {
- case 0: {
- getFromConsole(d, n, A, B, C, D);
- ready = true;
- reReaded = true;
- printMatrix(d, n);
- wait;
- break;
- }
- case 1: {
- bool fl = getFromFile(d, n, A, B, C, D);
- if (fl) {
- printMatrix(d, n);
- ready = true;
- reReaded = true;
- }
- else {
- cout << "Файл пошкоджено або даннi некоректнi" << endl;
- }
- wait;
- break;
- }
- case 2: {
- if (ready) {
- if (reReaded) {
- for (int i = 0; i < n; i++) {
- for (int j = 0; j < n; j++) {
- c[i][j] = i;
- }
- }
- for (int k = 0; k < n; ++k) {
- for (int i = 0; i < n; ++i) {
- for (int j = 0; j < n; ++j) {
- if (d[i][j] > d[i][k] + d[k][j]) {
- d[i][j] = d[i][k] + d[k][j];
- c[i][j] = c[k][j];
- }
- }
- }
- }
- vector<int> a;
- vector<int> b;
- answ.clear();
- getPath(A - 1, B - 1, a);
- getPath(C - 1, D - 1, b);
- /*for (int i = 0; i < a.size(); i++) {
- cout << a.at(i) << " ";
- }
- cout << endl;
- for (int i = 0; i < b.size(); i++) {
- cout << b.at(i) << " ";
- }
- cout << endl;
- wait;*/
- for (int i = 0; i < a.size(); i++) {
- if (find(b.begin(), b.end(), a.at(i)) != b.end()) {
- answ.push_back(a.at(i));
- }
- }
- }
- reReaded = false;
- int p = showMenu(printMenu, 2);
- if (p == 0) {
- cls;
- //printMatrix(d, 6);
- if (answ.size() == 0) {
- cout << "Найкоротшi вiдстанi з заданих вершин не перетинаються" << endl;
- }
- else {
- cout << "Список вершин, в яких перетинаються найкоротшi вiдстанi: ";
- }
- for (int i = 0; i < answ.size(); i++) {
- cout << answ.at(i) << ", ";
- }
- cout << endl;
- wait;
- }
- else {
- ofstream out("output.txt");
- if (answ.size() == 0) {
- out << "Найкоротшi вiдстанi з заданих вершин не перетинаються" << endl;
- }
- else {
- out << "Список вершин, в яких перетинаються найкоротшi вiдстанi: ";
- }
- for (int i = 0; i < answ.size(); i++) {
- out << answ.at(i)<< ", ";
- }
- out << endl;
- cls;
- cout << "Результат виведено у файл output.txt" << endl;
- wait;
- }
- }
- else {
- cls;
- cout << "Вiдсутнi вхiднi даннi" << endl;
- wait;
- }
- break;
- }
- }
- } while (p != 3);
- }
- int main() {
- setlocale(LC_ALL, "");
- int p = 0;
- do {
- p = showMenu(mainMenu, 3);
- switch (p) {
- case 0:
- work();
- break;
- case 1:
- showAbout();
- break;
- }
- } while (p != 2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement