শনিবার, ১৮ জুন, ২০১১

Prim's and Kruskal Algorithm solution

Prim's Algorithm

#include<iostream.h>
#include<conio.h>
#include<stdlib.h>

int cost[10][10],i,j,k,n,stk[10],top,v,visit[10],visited[10],u;
 
main()
{
    int m,c;
    cout <<"enterno of vertices";
    cin >> n;
    cout <<"ente no of edges";
    cin >> m;
    cout <<"\nEDGES Cost\n";
    for(k=1;k<=m;k++)
    {
        cin >>i>>j>>c;
        cost[i][j]=c;
    }
    for(i=1;i<=n;i++)
    for(j=1;j<=n;j++)
        if(cost[i][j]==0)
        cost[i][j]=31999;
 
    cout <<"ORDER OF VISITED VERTICES";
    k=1;
    while(k<n)
    {
        m=31999;
        if(k==1)
        {
            for(i=1;i<=n;i++)
                for(j=1;j<=m;j++)
                if(cost[i][j]<m)
                {
                    m=cost[i][j];
                    u=i;
                }
        }
        else
        {
            for(j=n;j>=1;j--)
            if(cost[v][j]<m && visited[j]!=1 && visit[j]!=1)
            {
                visit[j]=1;
                stk[top]=j;
                top++;
                m=cost[v][j];
                u=j;
            }
        }
        cost[v][u]=31999;
        v=u;
        cout<<v << " ";
        k++;
        visit[v]=0; visited[v]=1;
    }
} 


Kruskal Algorithm

 #include<iostream.h>
#include<conio.h>
#include<stdlib.h>

int cost[10][10],i,j,k,n,m,c,visit,visited[10],l,v,count,count1,vst,p;
 
main()
{
int dup1,dup2;
cout<<"enter no of vertices";
cin >> n;
cout <<"enter no of edges";
cin >>m;
cout <<"EDGE Cost";
for(k=1;k<=m;k++)
{
cin >>i >>j >>c;
cost[i][j]=c;
cost[j][i]=c;
}
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(cost[i][j]==0)
cost[i][j]=31999;
visit=1;
while(visit<n)
{
v=31999;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
if(cost[i][j]!=31999 && cost[i][j]<v  && cost[i][j]!=-1 )
{
int count =0;
for(p=1;p<=n;p++)
{
if(visited[p]==i || visited[p]==j)
count++;
}
if(count >= 2)
{
for(p=1;p<=n;p++)
if(cost[i][p]!=31999 && p!=j)
dup1=p;
for(p=1;p<=n;p++)
if(cost[j][p]!=31999 && p!=i)
dup2=p;
 
if(cost[dup1][dup2]==-1)
continue;
}
l=i;
k=j;
v=cost[i][j];
}
cout <<"edge from " <<l <<"-->"<<k;
cost[l][k]=-1;
cost[k][l]=-1;
visit++;
int count=0;
count1=0;
for(i=1;i<=n;i++)
{
if(visited[i]==l)
count++;
if(visited[i]==k)
count1++;
}
if(count==0)
visited[++vst]=l;
if(count1==0)
visited[++vst]=k;
}
 
 

কোন মন্তব্য নেই:

একটি মন্তব্য পোস্ট করুন