Тема: Алгоритм Лі
Попробував реалізувати за порадою Чорта алгоритм Лі, але не розумію що робити, коли суміжніх вершин більше ніж 4...
Чи це також просто застосувати алгоитм Дейкстри (можливо тупо). Підкажіть будь ласка.
#pragma once
#include <string>
#include <iostream>
class matrix {
private:
int** rix;
int num;
public:
matrix();
void mainmatrix();
void printmatrix();
int*** returnmatrix();
int returnnum();
~matrix();
};
class node {
public:
int index;
node* next;
void newnode(node**,int);
};
class list : public matrix, public node {
private:
node** mas;
int start;
int finish;
public:
list();
void fulllist();
node*** returnlist();
node** returnline(node***,int);
void printlist();
void lee();
//~list();
};
#include"Main.h"
#include <iostream>
matrix::matrix() {
std::cout << "Введіть розміри матриці: ";
int numm;
std::cin >> numm;
num = numm;
rix = new int* [num];
for (int i = 0; i < num; i++) {
rix[i] = new int[num];
}
}
void matrix::mainmatrix() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
rix[i][j] = rand() % 2;
rix[j][i] = rix[i][j];
}
}
for (int i = 0; i < num; i++) {
rix[i][i] = 1;
}
}
void matrix::printmatrix() {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (j == num - 1) {
std::cout << rix[i][j];
}
else {
std::cout << rix[i][j] << "-";
}
}
std::cout << std::endl;
}
}
int*** matrix::returnmatrix() {
return &rix;
}
int matrix::returnnum() {
return num;
}
matrix::~matrix() {
for (int i = 0; i < num; i++) {
delete[] rix[i];
}
delete [] rix;
}
void node::newnode(node** finode,int index) {
if (*(finode) == nullptr) {
(*finode) = new node;
(*finode)->index = index;
(*finode)->next = nullptr;
}
else {
node* findlast = (*finode);
while (findlast->next != nullptr) {
findlast = findlast->next;
}
findlast->next = new node;
findlast = findlast->next;
findlast->index = index;
findlast->next = nullptr;
}
}
list::list() {
mas = nullptr;
}
void list::fulllist() {
int** matrix = *matrix::returnmatrix();
int numm = list::returnnum();
mas = new node* [numm];
int** mass = *returnmatrix();
for (int i = 0; i < numm; i++) {
mas[i] = new node;
mas[i]->next = nullptr;
}
for (int i = 0; i < numm; i++) {
for (int j = 0; j < numm; j++) {
if (matrix[i][j]!=0) {
list::node::newnode(&mas[i],matrix[i][j]);
}
}
}
}
node*** list::returnlist() {
return &mas;
}
void list::printlist() {
int numm = list::returnnum();
node** mass = *list::returnlist();
for (int i = 0; i < numm; i++) {
node* print = mass[i];
while (print!= nullptr) {
std::cout <<print->index << "->";
print = print->next;
}
std::cout << std::endl;
}
}
node** list::returnline(node*** mas, int index) {
node** manode = *mas;
int num = list::returnnum();
for (int i = 0; i < num; i++) {
if (i == index) {
return manode;
}
}
}
void list::lee(){
std::cout << "Введіть початкову вершину: ";
std::cin >> start;
std::cout << "Введіть кінцеву вершину: ";
std::cin >> finish;
int num = list::returnnum();
int** mass = *returnmatrix();
mass[start][start] = -1;
int way = 1;
for (int p = 0; p < num; p++) {
for (int i = 0; i < num; i++) {
for (int j = 0; j < num; j++) {
if (mass[i][j] !=0) {
mass[i][j] = way + 1;
mass[j][i] = mass[i][j];
}
}
}
way = way + 1;
}
}