Professional Documents
Culture Documents
Grafovi - Programiranje
Grafovi - Programiranje
5.BFS-kalicanin-VEKTOR
#include <iostream>
#include <queue>
#include <vector>
using namespace std;
bool posecen[1000];
queue<int> susedi;
void bfs(vector<int> v[]){
while(!susedi.empty()){
int c = susedi.front();
if(posecen[c]){
susedi.pop();
}
else{
posecen[c] = true;
cout<<c<<" ";
for(int i = 0; i<v[c].size(); i++){
if(!posecen[v[c].at(i)]){
susedi.push(v[c].at(i));
}
}
}
}
}
int main()
{
int n;
cin>>n;
vector<int> g[n+1];
while(true){
int x,y;
cin>>x;
if(x==-1){
break;
}
cin>>y;
g[x].push_back(y);
g[y].push_back(x);
}
susedi.push(1);
bfs(g);
return 0;
}
GRAFOVI
6.BFS-milos-MATRICA
#include <iostream>
#include <queue>
using namespace std;
bool posecen [6];
bool povezan[6][6];
queue <int> niz;
void BFS(){
niz.push(1);
while(!niz.empty()){
if(posecen[niz.front()]){
niz.pop();
}
else{
posecen[niz.front()]=true;
cout<<niz.front()<<" ";
for(int i=1; i<6; i++){
if(povezan[niz.front()][i]==true && !posecen[i]){
niz.push(i);
}
}
}
}
}
int main()
{
int a=0,b=0;
while(a>-1){
povezan[a][b]=true;
povezan[b][a]=true;
cin>>a>>b;
}
BFS();
return 0;
}
GRAFOVI
7.DFS-kalicanin-VEKTOR
#include <iostream>
#include <vector>
using namespace std;
bool posecen[1000];
void ispisputa(vector<int> v[], int c){
posecen[c] = true;
cout<<c<<" ";
for(int i = 0; i<v[c].size(); i++){
if(!posecen[v[c].at(i)]){
ispisputa(v,v[c].at(i));
}
}
}
int main()
{
int n;
cin>>n;
vector<int> g[n+1];
while(true){
int x,y;
cin>>x;
if(x==-1){
break;
}
cin>>y;
g[x].push_back(y);
g[y].push_back(x);
}
for(int i = 0; i<=n; i++){
cout<<"T"<<i<<":";
for(int j = 0; j<g[i].size(); j++){
cout<<g[i].at(j)<<" ";
}
cout<<endl;
}
ispisputa(g,0);
return 0;
}
GRAFOVI
8.DFS-milos-MATRICA
#include <iostream>
9.DIJKSTRA-kalicanin
#include <iostream>
using namespace std;
const int N = 6;
const int INF = 2000000000;
int g[N][N] = {{0,5,6,0,0,0},{5,0,6,3,4,0},{6,6,0,1,0,0},{0,3,1,0,2,3},{0,4,0,2,0,7},{0,0,0,3,7,0}};
void dijkstra(int c){
bool povezan[N];
int d[N];
for(int i = 0; i<N; i++){
d[i] = INF;
povezan[i] = false;
}
d[c] = 0;
for(int i = 0; i<N; i++){
if(g[c][i]!=0){
d[i] = g[c][i];
}
}
povezan[c] = true;
while(true){
int s = INF;
int ind = -1;
for(int i = 0; i<N; i++){
if(!povezan[i]&&d[i]<s){
s = d[i];
ind = i;
}
}
if(ind==-1){
break;
}
for(int i = 0; i<N; i++){
if(g[ind][i]!=0 && d[ind]+g[ind][i]<d[i]){
d[i] = d[ind]+g[ind][i];
}
}
povezan[ind] = true;
}
for(int i = 0; i<N; i++){
cout<<d[i]<<" ";
}
}
int main()
{
dijkstra(0); return 0; }
GRAFOVI
10.DIJKSTRA-milos-REKURZIJA
#include <iostream>
using namespace std;
const int x = 2147483646;
const int n=6;
bool posecen[n];
int d[n+1]={x,x,x,x,x,x,x+1};
int mat[n][n]={{0,5,6,0,0,0},{5,0,6,3,4,0},{6,6,0,1,0,0,},{0,3,1,0,2,3},{0,4,0,2,0,7},{0,0,0,3,7,0}};
int najmanji(){
int minimal=n;
for(int i=0; i<n; i++){
if(!posecen[i] && d[i]<d[minimal]){
minimal=i;
}
}
return minimal;
}
void pocetak(int a){
d[a]=0;
}
void dijgstr(int a){
posecen[a]=true;
for(int i=0; i<n; i++){
if(i!=a && d[a]+mat[a][i]<d[i] && mat[a][i]!=0){
d[i]=d[a]+mat[a][i];
}
}
if(najmanji()!=n){
dijgstr(najmanji());
}
}
void ipisi(){
for(int i=0; i<n;i++){
cout<<d[i]<<" ";
}
}
void ceo(int a){
pocetak(a);
dijgstr(a);
}
int main()
{
ceo(0);
ipisi();
return 0;
}
GRAFOVI
11.FLOJD-MARSALOV
for(int i=0; i<n; i++){
for(int j=0; j<n; j++){
for(int k=0; k<n; k++){
if(tezina[i][k]!=beskonacno && tezina[k][j]!=beskonacno && tezina[i][j]>tezina[i][k]+tezina[k][j]){
tezina[i][j]=tezina[i][k]+tezina[k][j];
}
}
}
}