Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions dijkstra
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include<iostream>
#include<queue>
using namespace std;
//taking graph
int arr[5][5]={{0,10,0,5,0},{0,0,1,2,0},{0,0,0,0,4},{0,3,9,0,2},{7,0,6,0,0}};
priority_queue< <int>,vector<int>,greater<int> > q;
int main()
{
int v;
cout<<"enter njumber of vertices\n";
cin>>v;
// taking two array for key and visited
int key[v],i,j;
bool visited[v];
// initializing the two arrays
for(i=0;i<v;i++)
{
key[i]=INT_MAX;
visited[i]=false;
}
key[0]=0;
int p=1;
int min=key[0];
// looping until min heap becomes empty
while(p)
{
int l=0;
for(i=0;i<v;i++)
{
cout<<key[i]<<" ";
if(visited[i]==false)
{
l=1;
}
}
cout<<"\n";
if(l==0)
{
p=0;
break;
}

for(i=0;i<v;i++)
{
if(key[i]<min && visited[i]==false)
{
min=i;
}
}
cout<<min<<" L "<<endl;
visited[min]=true;
for(j=0;j<v;j++)
{
if(arr[min][j]!=0)
{
if(key[j]>key[min]+arr[min][j])
{
key[j]=key[min]+arr[min][j];
}
if(key[j]<min)
{
min=key[j];
}
}
}
}
// printing shortest distance from starting vertex
for(i=1;i<v;i++)
{
cout<<key[i]<<endl;
}

}
68 changes: 68 additions & 0 deletions prims algorithm
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#include<iostream>
using namespace std;
int main()
{
int v;
cout<<"enter number of vertices\n";
cin>>v;
cout<<"enter adjacency matrix\n";
int arr[v][v],i,j;
for(i=0;i<v;i++)
{
for(j=0;j<v;j++)
{
cin>>arr[i][j];
}
}
int parent[v],key[v];
bool visited[v];
for(i=0;i<v;i++)
{
parent[i]=-1;
visited[i]=false;
key[i]=INT_MAX;
}
key[0]=0;
int p=1,l;
while(p)
{
l=0;
for(i=0;i<v;i++)
{
if(visited[i]==false)
{
l=1;
}
}
if(l==0)
{
p=0;
break;
}
int min=-1;
for(i=0;i<v;i++)
{
if(visited[i]==false && (key[i]<min || min==-1))
{
min=i;
}
}
for(j=0;j<v;j++)
{
if(visited[j]==false && arr[min][j]!=0)
{
if(arr[min][j]<key[i])
{
key[j]=arr[min][j];
parent[j]=min;
}

}
}
visited[min]=true;
}
for(i=1;i<v;i++)
{
cout<<parent[i]<<" "<<i<<" "<<key[i]<<endl;
}
}