Vous êtes sur la page 1sur 2

Prim.

java
import java.util.*;
class Graph
{
int g[][];
int v,e;
int d[],p[],visited[];
void creategraph()
{
int a,b,w;
Scanner kbd=new Scanner(System.in);
System.out.println("Enter No. Of Vertices");
v=kbd.nextInt();
System.out.println("Enter No. Of edges");
e=kbd.nextInt();
//create matrix of v+1 rows & v+1 cols
g=new int[v+1][v+1];
//initialize entire matrix g to zero
for (int i=1;i<=v;i++)
for (int j=1;j<=v;j++)
g[i][j]=0;
//store edge information
for (int i=1;i<=e;i++)
{
System.out.println("Enter Edge Information");
a=kbd.nextInt();
b=kbd.nextInt();
System.out.println("Enter Weight Of This Edge");
w=kbd.nextInt();
g[a][b]=g[b][a]=w;
}
}//end creategraph
void callprim()
{
visited = new int[v+1];
d=new int[v+1];
p=new int[v+1];
//initialize p & visited to zero
for(int i=1;i<=v;i++)
p[i]=visited[i]=0;
//initialize d array to infinity
for (int i=1;i<=v;i++)
d[i]=32767;
//now call prim function for vertex 1
prim();
}
void prim()
{
int c,current,mincost=0;
current=1;
visited[current]=1;
d[current]=0;
c=1;
while(c!=v)
{
//process vertex k
for(int i=1;i<=v;i++)
{
if(g[current][i]!=0 && visited[i]!=1)
if(g[current][i]<d[i])
{
d[i]=g[current][i];
p[i]=current;
}
Page 1
Prim.java
}//end for
//now look for vertex at shortest distance
int min=32767;
for(int i=1;i<=v;i++)
{
if(visited[i]!=1 && d[i]<min)
{
min=d[i];
current=i;
}
}
//mark vertex current as visited
visited[current]=1;
c=c+1;
}//end while
//find out minimum cost by adding elements of d array
for(int i=1;i<=v;i++)
mincost +=d[i];
System.out.println("Minimum Cost ="+mincost);
}//end prim
}//end Graph Class
public class Prim
{
public static void main(String args[])
{
Graph g=new Graph();
g.creategraph();
g.callprim();
}
}

Page 2

Vous aimerez peut-être aussi