Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
ed-word authored Apr 26, 2017
1 parent 239fe67 commit 50dfad0
Show file tree
Hide file tree
Showing 4 changed files with 252 additions and 67 deletions.
71 changes: 71 additions & 0 deletions AllPairShortest.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#include<stdio.h>
#define MAX 4
#define INF 9999

void calc( int a[MAX][MAX], int anext[MAX][MAX])
{
int i,j,k;

for( k=0; k<MAX ; k++ )
{
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
if(i==k)
anext[i][j]=a[i][j];

else
{
if( a[i][k]+a[k][j] < a[i][j] )
anext[i][j] = a[i][k]+a[k][j];
else
anext[i][j] = a[i][j];
}

}
}


for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
a[i][j]=anext[i][j];

}


for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
printf("%d ",a[i][j]);
}
printf("\n");
}
}


int main()
{

int a[MAX][MAX], anext[MAX][MAX] ;
int i,j;


printf("Enter adjacency matrix Enter 0 for Infinity: \n");
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
scanf("%d",&a[i][j]);
if(i!=j && a[i][j]==0)
a[i][j]=INF;
}
}


printf("\n");
calc( a, anext );

return 0;
}
70 changes: 70 additions & 0 deletions Bellman.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
#include<stdio.h>
#define MAX 4
#define INF 9999

void calc( int a[MAX][MAX], anext[MAX][MAX])
{
int node = 0;
int i,j,k;

for( k=0; k<MAX ; k++ )
{
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
if(i==k)
anext[i][j]=a[i][j];

else
{
if( a[i][k]+a[k][j] < a[i][j] )
anext[i][j] = a[i][k]+a[k][j];
else
anext[i][j] = a[i][j];
}

}
}


for(i=0;i<MAX;i++)
for(j=0;j<MAX;j++)
a[i][j]=anext[i][j];

}


for(i=0;i<MAX;i++)
{
printf("%c ",(char)(i+65));
printf("%d\n", dist[i]);
}

}


int main()
{

int a[MAX][MAX], anext[MAX][MAX] ;
int i,j;


printf("Enter adjacency matrix: \n");
for(i=0;i<MAX;i++)
{
for(j=0;j<MAX;j++)
{
scanf("%d",&a[i][j]);
if(a[i][j]==0)
a[i][j]=INF;
}
}


printf("\n");
calc( a, anext );

return 0;
}
105 changes: 38 additions & 67 deletions Dijkstra.c
Original file line number Diff line number Diff line change
@@ -1,87 +1,59 @@
#include<stdio.h>
#define MAX 5
#define INF 9999
int parent[MAX]={0};
int dist[MAX];
int min;
int visit[MAX]={0};

int minfunc(int node,int a[MAX][MAX],int edg[MAX],int flag[MAX], int dist[MAX])

void dijkstra( int a[MAX][MAX])
{
int node = 0;
int i,j;
int min = INF;
int edge;

for(i=0;i<MAX;i++)
dist[node] = 0;


for( i=0; i<MAX ; i++ )
{
if( flag[i]==0 && edg[i]==0 && a[node][i]!=0 )
{
edg[i] = dist[node] + a[node][i];
parent[i] = node;
}
visit[node]=1;

else if( flag[i]==0 && edg[i]!=0 && a[node][i]!=0 )
for(j=0;j<MAX;j++)
{
if( dist[node]+a[node][i] < edg[i] )
{
edg[i] = dist[node]+a[node][i];
parent[i] = node;
}
}

}
if( a[node][j]!=INF )
{
if( (dist[node]+a[node][j]) < dist[j] )
{
dist[j] = dist[node]+a[node][j];
}
}
}

for(i=0;i<MAX;i++)
{
if( edg[i] < min && edg[i]!=0 )
min=INF;
for(j=0;j<MAX;j++)
{
min = edg[i];
edge = i;
}
}
flag[edge] = 1;
edg[edge] = 0;
dist[edge] = min;

return edge;
}

void path(int node)
{
if(parent[node]==0)
{
printf("%c-",(char)(node+65));
printf("%c\n",(char)(65));
}
else
{
printf("%c-",(char)(node+65));
path(parent[node]);
}
}

void dijkstra( int a[MAX][MAX], int edg[MAX], int flag[MAX] )
{
int dist[MAX]={0};
int node = 0;
int i;
dist[node] = 0;
flag[node] = 1;
for( i=0; i<MAX-1 ; i++ )
{
node = minfunc( node, a, edg, flag, dist);
if( visit[j]!=1 && dist[j]<min)
{
min=dist[j];
node=j;
}
}
}


for(i=0;i<MAX;i++)
{
printf("%c ",(char)(i+65));
printf("%d\n", dist[i]);
}
}

}


int main()
{

int a[MAX][MAX], flag[MAX]={0}, edg[MAX]={0} ;
int a[MAX][MAX], flag[MAX]={0}, edg[MAX]={0} ;
int i,j;


Expand All @@ -90,19 +62,18 @@ int main()
{
for(j=0;j<MAX;j++)
{
scanf("%d",&a[i][j]);
scanf("%d",&a[i][j]);
if(a[i][j]==0)
a[i][j]=INF;
}
}

for(i=0;i<MAX;i++)
dist[i]=INF;

printf("\n");
dijkstra( a, edg, flag );
dijkstra( a );

printf("\nPath for nodes:\n");
for(i=1;i<MAX;i++)
{
path(i);
}

return 0;
}

Expand Down
73 changes: 73 additions & 0 deletions GraphColor.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
#include <stdio.h>
#include <math.h>

int n;
int Colors;
int C[100];
int G[100][100];

int place(int node, int color)
{
int i;
for(i=0;i<n;i++)
{
if(G[node][i]!=0)
{
if(C[i]==color)
return 0;
}
}
return 1;
}

int putColor( int node )
{
int i, flag;
for(i=0;i<Colors;i++)
{
if(place(node, i))
{
C[node] = i;

if( node==(n-1) ) //Nth node
return 1;

flag = putColor(node+1); //Next node

if(flag==1)
return 1;
}
}

if( i==Colors ) //Backtrack
return 0;

return 1;
}

int main()
{
int i,j;
n=6;
Colors=3;

printf("Enter adjacency matrix: \n");
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
scanf("%d",&G[i][j]);
}
}

for(i=0;i<n;i++)
C[i]=-1;

putColor(0);

printf("\nSolution: ");
for(i=0;i<n;i++)
printf("%d ",C[i]);

return 0;
}

0 comments on commit 50dfad0

Please sign in to comment.