modify insertedge function so that it can keep the link list

modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs.
implement graph_copy() to create a copy of the given graph. User will call the original graph as myg1 and the copy as myg2, for which we use the same pointer names in the program.
Specifically, your program will ask user to enter a command and related parameters (if any) in a loop, and then perform the given commands. Here is the list of commands that your program must implement:
* 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

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


//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.

graph, undirectedgraphl Ext graph directedgraphl txt directe graph1.txt undirectedgraphl txt After studying and understanding the given code, first modify insert edge function so

Solution

* insert [myg1 | myg2] x y w
* delete [myg1 | myg2] x y
* printgraph [myg1 | myg2]
* printdegree [myg1 | myg2] // if directed, print each 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
graph.c program
#include
#include
typedef enum bool;
#define MAXV a hundred
typedef struct edgenode edgenodeT;
typedef struct 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 six

read_graph(graphT *g)

print_graph (graphT *g, char *name)

here area unit some clarifications
* insert myg1 three four twenty
insert a replacement edge 3-4 into myg1 graph with weight of twenty. If this can be Associate in Nursing planless graph conjointly insert edge 4-3 with weight twenty. If that edge is already within the graph, do not insert something...
* delete myg1 two four
delete edge 2-4 from myg1. If this can be Associate in Nursing planless graph conjointly delete edge 4-2. If that edge isn\'t within the graph, do not delete something...
* printgraph myg1
print graph victimisation the code given...\'
* printdegree myg1
if myg1 is planless, then merely count range|the amount|the quantity} of neighbors within the contiguousness list for every node and print that number because the degree of every node..
if the graph is directed, nevertheless you\'ll be able to merely count range|the amount|the quantity} of neighbors within the contiguousness list for every node and print that number because the out-degree of every node... however you furthermore mght got to notice in-degree. For this, you\'ll be able to check each node (say node i)and count what number times node i seems within the all contiguousness lists, and print that count because the in degree or node i.
* print complement myg2
First produce the complement graph of myg2 as cg, and decision printgraph(cg) then free complement graph cg.
* eliminatelinks myg1 minW maxW
check every edge letter
if (pe-&gt;w &lt; minW || pe-&gt;w &gt; maxW) delete that edge
* differentlinks myg1 myg2
print edges that area unit in my g1 however not in my g2
* commonlinks myg1 myg2
print edges that area unit each in my g1 and in myg2
* dfs_print myg1 x
print during which order nodes area unit visited then for every node print the trail from x thereto node
* bfs_print myg2 x
print during which order nodes area unit visited then for every node print the trail from x thereto node
* isconnected myg1
* numofconncomp myg2

modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs. implement graph_copy() to create a copy of the given graph. User wil
modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs. implement graph_copy() to create a copy of the given graph. User wil
modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs. implement graph_copy() to create a copy of the given graph. User wil
modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs. implement graph_copy() to create a copy of the given graph. User wil
modify insert_edge() function so that it can keep the link list sorted w.r.t. neighbor IDs. implement graph_copy() to create a copy of the given graph. User wil

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site