SlideShare a Scribd company logo
The graph above is just an example that shows the differences in distance like 5 to 6 is 1. It
doesnt matter to this proggram just a visual representation.
1 2 3 is one of the numbers on there. number 1 to number 2 has a distance of 3
//example of graph in program
I need help with the functions I'm supposed to put in
* insert [myg1 | myg2] x y w
* delete [myg1 | myg2] x y
* printgraph [myg1 | myg2]
* printdegree [myg1 | myg2] // if directed, print both in- and out-degree
* printcomplement [myg1 | myg2]
* eliminatelinks [myg1 | myg2] minW maxW
* differentlinks [myg1 | myg2] [myg1 | myg2]
* commonlinks [myg1 | myg2] [myg1 | myg2]
* dfs_print [myg1 | myg2] x
* bfs_print [myg1 | myg2] x
* isconnected [myg1 | myg2]
* numofconncomp [myg1 | myg2] * quit
//myg1 and myg2 are seperate. you can change just one graph at a time so the user must be asked
which one they want to change. Also you can copy myg1 over to myg2. Like the picture you can
make them completely different such as adding or deleting one on myg1 but leaving myg2 alone
here is the program so far. I just need to program and put in those function. I need to make it so
the user can pick what they want to do but I can program that myself. it's just programming the
above functions. I put clarifications of them at the bottom.
graph.c program
#include
#include
typedef enum {FALSE, TRUE} bool;
#define MAXV 100
typedef struct edgenode{
int y;
int weight;
struct edgenode *next;
} edgenodeT;
typedef struct{
edgenodeT *edges[MAXV+1];
int degree[MAXV+1];
int nvertices;
int nedges;
bool directed;
} graphT;
void initialize_graph(graphT *g, bool directed);
void read_graph(graphT *g, char *filename);
void insert_edge(graphT *g, int x, int y, int w);
void print_graph(graphT *g, char *name);
void free_graph(graphT *g);
graphT *copy_graph(graphT *g);
main()
// Assume that MAXV is 6
{
graphT *myg1 = NULL, *myg2 = NULL;
if(argc < 2){
fprintf(stderr, "Usage: %s graph_filename", argv[0]);
exit(-1);
}
myg1 = (graphT *) malloc(sizeof(graphT));
if (myg1==NULL) {
fprintf(stderr, "Cannot allocate memory for the graph");
exit(-1);
}
initialize_graph(myg1, FALSE);
read_graph(myg1, argv[1]);
print_graph(myg1, "myg1");
myg2 = copy_graph(myg1);
print_graph(myg2, "myg2");
// NOW in a loop get commands and
// call related functions to perform them...
free_graph(myg1);
}
initialize_graph (graphT*g, bool directed)
{
int i;
g->nvertices= 0;
g->nedges= 0;
g->directed = directed;
for (i=1; i<=MAXV; i++)
g->edges[i] = NULL;
for(i=1; i<=MAXV; i++)
g->degree[i] = 0;
}
read_graph(graphT *g)
{
int i;
int n, m, dir;
int x, y, w;
FILE *fp
if((fp=fopen(filename,"r"))==NULL){
fprintf(stderr, "Cannot open the graph file");
exit(-1);
}
scanf(”%d %d %d”, &n, &m, &dir);
g->nvertices= n;
g->nedges= 0;
g->directed= dir;
for (i=1; i<=m; i++) {
scanf(”%d %d %d”, &x, &y, &w);
insert _edge(g, x, y, w);
if(dir==FALSE)
insert _edge(g, y, x, w);
}
fclose(fp);
}
insert_edge(graphT *g, int x, int y, int w)
{
edgenodeT *pe;
pe= malloc(sizeof(edgenodeT)); // check if NULL
pe->weight = w;
pe->y = y;
pe->next = g->edges[x];
g->edges[x] = pe;
g->degree[x]++;
g->nedges++;
}
print_graph (graphT *g, char *name)
{
edgenodeT *pe;
int i;
if(!g) return;
printf("Graph Name: %s ", name);
for(i=1; i<=g->nvertices; i++){
printf("Node %d: ", i);
pe = g->edges[i];
while(ge){
printf(" %d %d,", pe->y, pe->weight);
pe = pe->next;
}
printf(" ");
}
}
free_graph(graphT *g)
{
edgenodeT *pe, *olde;
int i;
for(i=1; i<=g->nvertices;i++){
pe = g->edges[i];
while(pe){
olde = ps;
pe = pe->next;
free(olde);
}
}
free(g);
}
graphT *copy_graph(graphT *g)
{
graphT *newg;
newg = g;
return newg;
}
here are some clarifications
* insert myg1 3 4 20
insert a new edge 3-4 into myg1 graph with weight of 20. If this is an undirected graph also
insert edge 4-3 with weight 20. If that edge is already in the graph, don't insert anything...
* delete myg1 2 4
delete edge 2-4 from myg1. If this is an undirected graph also delete edge 4-2. If that edge is not
in the graph, don't delete anything...
* printgraph myg1
print graph using the code given...'
* printdegree myg1
if myg1 is undirected, then simply count the number of neighbors in the adjacency list for each
node and print that number as the degree of each node..
if the graph is directed, then again you can simply count the number of neighbors in the
adjacency list for each node and print that number as the out-degree of each node... BUT you
also need to find in-degree. For this, you can check every node (say node i)and count how many
times node i appears in the all adjacency lists, and print that count as the in degree or node i.
* print complement myg2
First create the complement graph of myg2 as cg, and call printgraph(cg) then free complement
graph cg.
* eliminatelinks myg1 minW maxW
check each edge pe
if (pe->w < minW || pe->w > maxW) delete that edge
* differentlinks myg1 myg2
print edges that are in my g1 but not in my g2
* commonlinks myg1 myg2
print edges that are both in my g1 and in myg2
* dfs_print myg1 x
print in which order nodes are visited then for each node print the path from x to that node
* bfs_print myg2 x
print in which order nodes are visited then for each node print the path from x to that node
* isconnected myg1
* numofconncomp myg2 graph. txt zive. txt 1, takt.
Solution
#include
#include
typedef enum {FALSE, TRUE} bool;
#define MAXV 100;
typedef struct edgenode
{
int y;
int weight;
struct edgenode *next;
} edgenodeT;
typedef struct
{
edgenodeT *edges[MAXV+1];
int degree[MAXV+1];
int nvertices;
int nedges;
bool directed;
} graphT;
void initialize_graph(graphT *g, bool directed);
void read_graph(graphT *g, char *filename);
void insert_edge(graphT *g, int x, int y, int w);
void print_graph(graphT *g, char *name);
void free_graph(graphT *g);
graphT *copy_graph(graphT *g);
main()
// Assume that MAXV is 6
{
int ch;
switch(ch)
{
Case ‘1’:Printf(“1.Press 1 for 1st Graph::”);
Scanf(“%d”,ch);
Break;
Case ‘2’:printf(“2.Press 2 for 2nd Graph:”);
Scanf(“%d”,ch);
Break;
Case ‘3’:printf(“3.For Display Grpah :”);
If(ch==3)
{
Print_graph();
}
Break;
Exit(0);
}
graphT *myg1 = NULL, *myg2 = NULL;
if(argc < 2)
{
fprintf(stderr, "Usage: %s graph_filename", argv[0]);
exit(-1);
}
myg1 = (graphT *) malloc(sizeof(graphT));
if (myg1==NULL)
{
fprintf(stderr, "Cannot allocate memory for the graph");
exit(-1);
}
initialize_graph(myg1, FALSE);
read_graph(myg1, argv[1]);
print_graph(myg1, "myg1");
myg2 = copy_graph(myg1);
print_graph(myg2, "myg2");
// NOW in a loop get commands and
// call related functions to perform them...
free_graph(myg1);
}
initialize_graph (graphT*g, bool directed)
{
int i;
g->nvertices= 0;
g->nedges= 0;
g->directed = directed;
for (i=1; i<=MAXV; i++)
g->edges[i] = NULL;
for(i=1; i<=MAXV; i++)
g->degree[i] = 0;
}
read_graph(graphT *g)
{
int i;
int n, m, dir;
int x, y, w;
FILE *fp
if((fp=fopen(filename,"r"))==NULL)
{
fprintf(stderr, "Cannot open the graph file");
exit(-1);
}
scanf(”%d %d %d”, &n, &m, &dir);
g->nvertices= n;
g->nedges= 0;
g->directed= dir;
for (i=1; i<=m; i++)
{
scanf(”%d %d %d”, &x, &y, &w);
insert _edge(g, x, y, w);
if(dir==FALSE)
insert _edge(g, y, x, w);
}
fclose(fp);
}
insert_edge(graphT *g, int x, int y, int w)
{
edgenodeT *pe;
pe= malloc(sizeof(edgenodeT)); // check if NULL
pe->weight = w;
pe->y = y;
pe->next = g->edges[x];
g->edges[x] = pe;
g->degree[x]++;
->nedges++;
}
print_graph (graphT *g, char *name)
{
edgenodeT *pe;
int i;
if(!g) return;
printf("Graph Name: %s ", name);
for(i=1; i<=g->nvertices; i++)
{
printf("Node %d: ", i);
pe = g->edges[i];
while(ge)
{
printf(" %d t %d,", pe->y, pe->weight);
pe = pe->next;
}
printf(" ");
}
}
Void display()
{
Printf(“******Graph 1*******”);
for(i=1; i<=g->nvertices; i++)
{
printf("Node  %d: "  , i);
pe = g->edges[i];
}
Printf(*****Grpah2******);
for(i=1; i<=g->nvertices; i++)
{
printf("Node  %d  : ", i);
pe = g->edges[i];
}
free_graph(graphT *g)
{
edgenodeT *pe, *olde;
int i;
for(i=1; i<=g->nvertices;i++)
{
pe = g->edges[i];
while(pe){
olde = ps;
pe = pe->next;
free(olde);
}
}
free(g);
}
graphT *copy_graph(graphT *g)
{
graphT *newg;
newg = g;
return newg;
}

More Related Content

PDF
implement the following funtions. myg1 and myg2 are seperate. x and .pdf
PDF
PART 4: GEOGRAPHIC SCRIPTING
DOCX
Computer graphics lab assignment
PDF
fraction_math.c for Project 5 Program Design fraction.pdf
DOCX
Computer graphics
PPTX
IGraph a tool to analyze your network
PDF
Twopi.1
PDF
1. Translation program#includestdio.h#includeconio.h#incl.pdf
implement the following funtions. myg1 and myg2 are seperate. x and .pdf
PART 4: GEOGRAPHIC SCRIPTING
Computer graphics lab assignment
fraction_math.c for Project 5 Program Design fraction.pdf
Computer graphics
IGraph a tool to analyze your network
Twopi.1
1. Translation program#includestdio.h#includeconio.h#incl.pdf

Similar to The graph above is just an example that shows the differences in dis.pdf (20)

PDF
2Bytesprog2 course_2014_c9_graph
PPT
Drawing Figures
DOCX
Ghana National Flag
PDF
All I know about rsc.io/c2go
PDF
operating system ubuntu,linux,MacProgram will work only if you g.pdf
PDF
Elastic response pseudo spectrum in c programming
PDF
201707 SER332 Lecture 05
PDF
operating system Linux,ubuntu,Mac#include stdio.h #include .pdf
DOCX
Computer graphics
DOCX
Lab Practices and Works Documentation / Report on Computer Graphics
PDF
PDF
Q1 Consider the below omp_trap1.c implantation, modify the code so t.pdf
PDF
DATA STRUCTURES & ALGORITHMS MINIMUM SPANNING TREE
PDF
import java.awt.;import java.awt.event.MouseAdaptor;import java.pdf
PPTX
Introduction to graphics programming in c
PDF
[系列活動] Data exploration with modern R
PDF
05-Debug.pdf
PDF
Programming with matlab session 6
DOCX
square.cpp Open
PDF
Python grass
2Bytesprog2 course_2014_c9_graph
Drawing Figures
Ghana National Flag
All I know about rsc.io/c2go
operating system ubuntu,linux,MacProgram will work only if you g.pdf
Elastic response pseudo spectrum in c programming
201707 SER332 Lecture 05
operating system Linux,ubuntu,Mac#include stdio.h #include .pdf
Computer graphics
Lab Practices and Works Documentation / Report on Computer Graphics
Q1 Consider the below omp_trap1.c implantation, modify the code so t.pdf
DATA STRUCTURES & ALGORITHMS MINIMUM SPANNING TREE
import java.awt.;import java.awt.event.MouseAdaptor;import java.pdf
Introduction to graphics programming in c
[系列活動] Data exploration with modern R
05-Debug.pdf
Programming with matlab session 6
square.cpp Open
Python grass

More from jyothimuppasani1 (20)

PDF
How does an open source operating system like Linux® affect Internet.pdf
PDF
Help please!!(Include your modified DList.java source code file in.pdf
PDF
how can I replace the Newsfeed text with a custom on in SharePoi.pdf
PDF
Hello!This is Java assignment applet.Can someone help me writing.pdf
PDF
For each of the following reseach questions identify the observation.pdf
PDF
Find an Eulerian trail in the following graph. Be sure to indicate th.pdf
PDF
File encryption. [32] Write a program which accepts a filename as a .pdf
PDF
Explain the relevance that medical standards of practice have to one.pdf
PDF
Find the mission and values statements for four different hospita.pdf
PDF
Did colonial rule freeze colonized societies by preserving old s.pdf
PDF
Do you think that nonhuman animals have interests Does this mean th.pdf
PDF
Discuss the importance of recognizing and implementing different ent.pdf
PDF
Considering the challenges she is facing, what Anitas plan before .pdf
PDF
Data Structure in C++Doubly Linked Lists of ints httpstaffwww.pdf
PDF
Conceptual skills are most important at theSolutionConceptual .pdf
PDF
A variable whose scope is restricted to the method where it was decl.pdf
PDF
•Design (create) 3 questions for a quiz show game and design regular.pdf
PDF
You are to write a GUI program that will allow a user to buy, sell a.pdf
PDF
write the To Dos to get the exact outputNOte A valid Fraction .pdf
PDF
What are the factors that contribute to H+ gain or loss How do lung.pdf
How does an open source operating system like Linux® affect Internet.pdf
Help please!!(Include your modified DList.java source code file in.pdf
how can I replace the Newsfeed text with a custom on in SharePoi.pdf
Hello!This is Java assignment applet.Can someone help me writing.pdf
For each of the following reseach questions identify the observation.pdf
Find an Eulerian trail in the following graph. Be sure to indicate th.pdf
File encryption. [32] Write a program which accepts a filename as a .pdf
Explain the relevance that medical standards of practice have to one.pdf
Find the mission and values statements for four different hospita.pdf
Did colonial rule freeze colonized societies by preserving old s.pdf
Do you think that nonhuman animals have interests Does this mean th.pdf
Discuss the importance of recognizing and implementing different ent.pdf
Considering the challenges she is facing, what Anitas plan before .pdf
Data Structure in C++Doubly Linked Lists of ints httpstaffwww.pdf
Conceptual skills are most important at theSolutionConceptual .pdf
A variable whose scope is restricted to the method where it was decl.pdf
•Design (create) 3 questions for a quiz show game and design regular.pdf
You are to write a GUI program that will allow a user to buy, sell a.pdf
write the To Dos to get the exact outputNOte A valid Fraction .pdf
What are the factors that contribute to H+ gain or loss How do lung.pdf

Recently uploaded (20)

PDF
Module 4: Burden of Disease Tutorial Slides S2 2025
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PDF
TR - Agricultural Crops Production NC III.pdf
PPTX
master seminar digital applications in india
PPTX
Renaissance Architecture: A Journey from Faith to Humanism
PPTX
Cell Types and Its function , kingdom of life
PDF
STATICS OF THE RIGID BODIES Hibbelers.pdf
PDF
Computing-Curriculum for Schools in Ghana
PDF
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
PDF
FourierSeries-QuestionsWithAnswers(Part-A).pdf
PDF
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
PDF
Supply Chain Operations Speaking Notes -ICLT Program
PDF
Microbial disease of the cardiovascular and lymphatic systems
PDF
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
PPTX
Lesson notes of climatology university.
PDF
Anesthesia in Laparoscopic Surgery in India
PDF
102 student loan defaulters named and shamed – Is someone you know on the list?
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PDF
Pre independence Education in Inndia.pdf
PPTX
Microbial diseases, their pathogenesis and prophylaxis
Module 4: Burden of Disease Tutorial Slides S2 2025
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
TR - Agricultural Crops Production NC III.pdf
master seminar digital applications in india
Renaissance Architecture: A Journey from Faith to Humanism
Cell Types and Its function , kingdom of life
STATICS OF THE RIGID BODIES Hibbelers.pdf
Computing-Curriculum for Schools in Ghana
ANTIBIOTICS.pptx.pdf………………… xxxxxxxxxxxxx
FourierSeries-QuestionsWithAnswers(Part-A).pdf
BÀI TẬP BỔ TRỢ 4 KỸ NĂNG TIẾNG ANH 9 GLOBAL SUCCESS - CẢ NĂM - BÁM SÁT FORM Đ...
Supply Chain Operations Speaking Notes -ICLT Program
Microbial disease of the cardiovascular and lymphatic systems
Chapter 2 Heredity, Prenatal Development, and Birth.pdf
Lesson notes of climatology university.
Anesthesia in Laparoscopic Surgery in India
102 student loan defaulters named and shamed – Is someone you know on the list?
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
Pre independence Education in Inndia.pdf
Microbial diseases, their pathogenesis and prophylaxis

The graph above is just an example that shows the differences in dis.pdf

  • 1. The graph above is just an example that shows the differences in distance like 5 to 6 is 1. It doesnt matter to this proggram just a visual representation. 1 2 3 is one of the numbers on there. number 1 to number 2 has a distance of 3 //example of graph in program I need help with the functions I'm supposed to put in * insert [myg1 | myg2] x y w * delete [myg1 | myg2] x y * printgraph [myg1 | myg2] * printdegree [myg1 | myg2] // if directed, print both in- and out-degree * printcomplement [myg1 | myg2] * eliminatelinks [myg1 | myg2] minW maxW * differentlinks [myg1 | myg2] [myg1 | myg2] * commonlinks [myg1 | myg2] [myg1 | myg2] * dfs_print [myg1 | myg2] x * bfs_print [myg1 | myg2] x * isconnected [myg1 | myg2] * numofconncomp [myg1 | myg2] * quit //myg1 and myg2 are seperate. you can change just one graph at a time so the user must be asked which one they want to change. Also you can copy myg1 over to myg2. Like the picture you can make them completely different such as adding or deleting one on myg1 but leaving myg2 alone here is the program so far. I just need to program and put in those function. I need to make it so the user can pick what they want to do but I can program that myself. it's just programming the above functions. I put clarifications of them at the bottom. graph.c program #include #include typedef enum {FALSE, TRUE} bool; #define MAXV 100 typedef struct edgenode{ int y; int weight; struct edgenode *next; } edgenodeT; typedef struct{ edgenodeT *edges[MAXV+1];
  • 2. int degree[MAXV+1]; int nvertices; int nedges; bool directed; } graphT; void initialize_graph(graphT *g, bool directed); void read_graph(graphT *g, char *filename); void insert_edge(graphT *g, int x, int y, int w); void print_graph(graphT *g, char *name); void free_graph(graphT *g); graphT *copy_graph(graphT *g); main() // Assume that MAXV is 6 { graphT *myg1 = NULL, *myg2 = NULL; if(argc < 2){ fprintf(stderr, "Usage: %s graph_filename", argv[0]); exit(-1); } myg1 = (graphT *) malloc(sizeof(graphT)); if (myg1==NULL) { fprintf(stderr, "Cannot allocate memory for the graph"); exit(-1); } initialize_graph(myg1, FALSE); read_graph(myg1, argv[1]); print_graph(myg1, "myg1"); myg2 = copy_graph(myg1); print_graph(myg2, "myg2"); // NOW in a loop get commands and // call related functions to perform them... free_graph(myg1); } initialize_graph (graphT*g, bool directed) { int i;
  • 3. g->nvertices= 0; g->nedges= 0; g->directed = directed; for (i=1; i<=MAXV; i++) g->edges[i] = NULL; for(i=1; i<=MAXV; i++) g->degree[i] = 0; } read_graph(graphT *g) { int i; int n, m, dir; int x, y, w; FILE *fp if((fp=fopen(filename,"r"))==NULL){ fprintf(stderr, "Cannot open the graph file"); exit(-1); } scanf(”%d %d %d”, &n, &m, &dir); g->nvertices= n; g->nedges= 0; g->directed= dir; for (i=1; i<=m; i++) { scanf(”%d %d %d”, &x, &y, &w); insert _edge(g, x, y, w); if(dir==FALSE) insert _edge(g, y, x, w); } fclose(fp); } insert_edge(graphT *g, int x, int y, int w) { edgenodeT *pe; pe= malloc(sizeof(edgenodeT)); // check if NULL pe->weight = w; pe->y = y;
  • 4. pe->next = g->edges[x]; g->edges[x] = pe; g->degree[x]++; g->nedges++; } print_graph (graphT *g, char *name) { edgenodeT *pe; int i; if(!g) return; printf("Graph Name: %s ", name); for(i=1; i<=g->nvertices; i++){ printf("Node %d: ", i); pe = g->edges[i]; while(ge){ printf(" %d %d,", pe->y, pe->weight); pe = pe->next; } printf(" "); } } free_graph(graphT *g) { edgenodeT *pe, *olde; int i; for(i=1; i<=g->nvertices;i++){ pe = g->edges[i]; while(pe){ olde = ps; pe = pe->next; free(olde); } } free(g); } graphT *copy_graph(graphT *g)
  • 5. { graphT *newg; newg = g; return newg; } here are some clarifications * insert myg1 3 4 20 insert a new edge 3-4 into myg1 graph with weight of 20. If this is an undirected graph also insert edge 4-3 with weight 20. If that edge is already in the graph, don't insert anything... * delete myg1 2 4 delete edge 2-4 from myg1. If this is an undirected graph also delete edge 4-2. If that edge is not in the graph, don't delete anything... * printgraph myg1 print graph using the code given...' * printdegree myg1 if myg1 is undirected, then simply count the number of neighbors in the adjacency list for each node and print that number as the degree of each node.. if the graph is directed, then again you can simply count the number of neighbors in the adjacency list for each node and print that number as the out-degree of each node... BUT you also need to find in-degree. For this, you can check every node (say node i)and count how many times node i appears in the all adjacency lists, and print that count as the in degree or node i. * print complement myg2 First create the complement graph of myg2 as cg, and call printgraph(cg) then free complement graph cg. * eliminatelinks myg1 minW maxW check each edge pe if (pe->w < minW || pe->w > maxW) delete that edge * differentlinks myg1 myg2 print edges that are in my g1 but not in my g2 * commonlinks myg1 myg2 print edges that are both in my g1 and in myg2 * dfs_print myg1 x print in which order nodes are visited then for each node print the path from x to that node * bfs_print myg2 x print in which order nodes are visited then for each node print the path from x to that node
  • 6. * isconnected myg1 * numofconncomp myg2 graph. txt zive. txt 1, takt. Solution #include #include typedef enum {FALSE, TRUE} bool; #define MAXV 100; typedef struct edgenode { int y; int weight; struct edgenode *next; } edgenodeT; typedef struct { edgenodeT *edges[MAXV+1]; int degree[MAXV+1]; int nvertices; int nedges; bool directed; } graphT; void initialize_graph(graphT *g, bool directed); void read_graph(graphT *g, char *filename); void insert_edge(graphT *g, int x, int y, int w); void print_graph(graphT *g, char *name); void free_graph(graphT *g); graphT *copy_graph(graphT *g); main() // Assume that MAXV is 6 { int ch; switch(ch) { Case ‘1’:Printf(“1.Press 1 for 1st Graph::”);
  • 7. Scanf(“%d”,ch); Break; Case ‘2’:printf(“2.Press 2 for 2nd Graph:”); Scanf(“%d”,ch); Break; Case ‘3’:printf(“3.For Display Grpah :”); If(ch==3) { Print_graph(); } Break; Exit(0); } graphT *myg1 = NULL, *myg2 = NULL; if(argc < 2) { fprintf(stderr, "Usage: %s graph_filename", argv[0]); exit(-1); } myg1 = (graphT *) malloc(sizeof(graphT)); if (myg1==NULL) { fprintf(stderr, "Cannot allocate memory for the graph"); exit(-1); } initialize_graph(myg1, FALSE); read_graph(myg1, argv[1]); print_graph(myg1, "myg1"); myg2 = copy_graph(myg1); print_graph(myg2, "myg2"); // NOW in a loop get commands and // call related functions to perform them... free_graph(myg1); } initialize_graph (graphT*g, bool directed)
  • 8. { int i; g->nvertices= 0; g->nedges= 0; g->directed = directed; for (i=1; i<=MAXV; i++) g->edges[i] = NULL; for(i=1; i<=MAXV; i++) g->degree[i] = 0; } read_graph(graphT *g) { int i; int n, m, dir; int x, y, w; FILE *fp if((fp=fopen(filename,"r"))==NULL) { fprintf(stderr, "Cannot open the graph file"); exit(-1); } scanf(”%d %d %d”, &n, &m, &dir); g->nvertices= n; g->nedges= 0; g->directed= dir; for (i=1; i<=m; i++) { scanf(”%d %d %d”, &x, &y, &w); insert _edge(g, x, y, w); if(dir==FALSE) insert _edge(g, y, x, w); } fclose(fp); } insert_edge(graphT *g, int x, int y, int w) {
  • 9. edgenodeT *pe; pe= malloc(sizeof(edgenodeT)); // check if NULL pe->weight = w; pe->y = y; pe->next = g->edges[x]; g->edges[x] = pe; g->degree[x]++; ->nedges++; } print_graph (graphT *g, char *name) { edgenodeT *pe; int i; if(!g) return; printf("Graph Name: %s ", name); for(i=1; i<=g->nvertices; i++) { printf("Node %d: ", i); pe = g->edges[i]; while(ge) { printf(" %d t %d,", pe->y, pe->weight); pe = pe->next; } printf(" "); } } Void display() { Printf(“******Graph 1*******”); for(i=1; i<=g->nvertices; i++) { printf("Node %d: " , i); pe = g->edges[i]; }
  • 10. Printf(*****Grpah2******); for(i=1; i<=g->nvertices; i++) { printf("Node %d : ", i); pe = g->edges[i]; } free_graph(graphT *g) { edgenodeT *pe, *olde; int i; for(i=1; i<=g->nvertices;i++) { pe = g->edges[i]; while(pe){ olde = ps; pe = pe->next; free(olde); } } free(g); } graphT *copy_graph(graphT *g) { graphT *newg; newg = g; return newg; }