Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТЧЕТ ГРАФЫ.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
46 Кб
Скачать
☆

Int main()

{

freopen("input.txt", "r", stdin);

freopen("output.txt", "w", stdout);

int n, m, l, r;

cin >> n >> m;

Graf.resize(n), used.resize(n);

forn(i, m)

{

cin >> l >> r;

l--, r--;

Graf[l].push_back(r);

}

forn(i, n)

{

if(!dfs(i))

{

cout << "Cycle";

return 0;

}

used.assign(n, 0);

}

cout << "Normalno";

}

Топологическая сортировка.

Реализация топологической сортировки.

#include <iostream>

#include <sstream>

#include <vector>

#include <algorithm>

#include <string>

using namespace std;

int n;

vector <vector <int>> qq;

vector <bool> used;

vector <int> result;

void dfs(int v){

used[v] = true;

for (int i = 0; i < qq[v].size(); i++)

if(!used[qq[v][i]])

dfs(qq[v][i]);

result.push_back(v);

}

Int main(){

freopen("input.txt","r",stdin);

freopen("output.txt","w",stdout);

int temp;

cin >> n;

cin.get();

qq.resize(n);

used.assign(n, false);

string s;

for(int i = 0; i < n; i++){

std::stringstream ss;

getline(cin, s);

ss << s;

while(ss >> temp){

temp--;

qq[i].push_back(temp);

}

}

for (int i = 0; i < n; i++)

if (!used[i])

dfs (i);

reverse (result.begin(), result.end());

for(int i = 0; i < result.size(); i++)

cout << ++result[i] << " ";

return 0;

}

Алгоритм Флойда.

Реализовать алгоритм Флойда.

#include <iostream>

#include <vector>

#include <sstream>

using namespace std;

const int INF = 1000000000;

Int main(){

freopen ("input.txt","r",stdin);

freopen ("output.txt","w",stdout);

int n; cin >> n;

vector < vector <int> > d(n);

int temp;

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++){

cin >> temp;

if(temp != 0)

d[i].push_back(temp);

else

d[i].push_back(INF);

}

for (int k = 1; k < n; k++)

for (int i = 0; i < n; i++)

for (int j = 0; j < n; j++)

d[i][j] = min (d[i][j], d[i][k] + d[k][j]);

for (int i = 0; i < n; i++, cout << endl)

for (int j = 0; j < n; j++)

cout << d[i][j] <<" ";

return 0;

}

Стек и очередь

Стек.

Создать список из слов. Перестроить элементы списка в обратном порядке.

#include <iostream>

#include <fstream>

#include <stdio.h>

#include <string>

using namespace std;

struct tstack{

string inf;

tstack * next;

};

tstack * head;

tstack *init_stack(){

return NULL;

}

void push_st(tstack *&s, string item){

tstack * r = new tstack;

r->inf = item;

r->next = s;

s=r;

}

string pop_st(tstack *&s){

tstack * r = s;

string i = r->inf;

s = r->next;

delete r;

return i;

}

int empty_stack(tstack *s){

return (s) ? 0: 1;

}

Ifstream in("input.Txt");

ofstream out("output.txt");

Int main(){

string temp;

tstack * head = init_stack();

tstack * head2 = init_stack();

while (in>>temp)

push_st(head, temp);

while (!empty_stack(head)){

temp = pop_st(head);

out<<temp<<" ";

push_st(head2, temp);

}

return 0;

}

Очередь.

Имеется устройство с   последовательными ячейками памяти, работающими по принципу очереди. На вход устройства могут подаваться цифры и символ " * ". При получении цифры устройство размещает её в последней незанятой ячейке памяти. Если все ячейки заняты, первая ячейка освобождается и значения всех остальных смещаются на ячейку влево. Новый элемент (поданная на вход цифра) добавляется в освободившуюся последнюю ячейку. При подаче символа " * " выводится и удаляется элемент из первой ячейки памяти (остальные сдвигаются на освободившуюся ячейку). Если ячейки памяти пусты, печатается сам символ " * ". Промоделируйте работу данного устройства.

#include <fstream>

#include <iostream>

#include <vector>

#include <sstream>

using namespace std;

struct tqueue{

char inf;

tqueue *next;

};

tqueue *head, *tail;

void init_tqueue (tqueue *&h, tqueue *&t)

{h=t=NULL;}

void insert(tqueue *&h, tqueue *&t, char item){

tqueue *r = new tqueue;

r->inf=item; r->next=NULL;

if (!h&&!t)

h=t=r;

else {t->next=r; t=r;}

}

char take(tqueue *&h, tqueue *&t){

tqueue *r=h;

char i=r->inf;

h=r->next;

if (!h)

t=NULL;

delete r;

return i;

}