السلام عليكم ورحمة الله وبركاته...
عندي سؤال في كود كتب بلغة السي، هدف الكود هو عمل Graph Representation،عثرت عليه بصورته العامة من موقع:
http://www.programming-challenges.com/pg.php?page=index
تحديداً:
http://www.cs.sunysb.edu/~skiena/392/programs/
إسم الملف graph.c ويستخدم أيضاً graph.h و queue.h وكلاهما موجود في الموقع أعلاه.
المشكلة عندي أني لم أستطع إتمام العمل كي يقوم الكود بقراءة graph ما بال vertices وال edges التي أريدهم! لا أعرف أين المشكلة عندي بالضبط!، لكن هذا الكود الذي قمت بالتعديل عليه على الكود العام،أرجو المساعدة في العثور على مكان الخلل في كودي، ليتسنى لي قراءة graph وتمثيله بشكل سليم.
ولكم مني جزيل الشكر...
#include <stdio.h>
#include "bool.h"
#include "queue.h"
#include "graph.h"
void initialize_graph(graph *g);
void read_graph(graph *g, bool directed);
void insert_edge(graph *g, int x, int y, bool directed);
void delete_edge(graph *g, int x, int y, bool directed);
void print_graph(graph *g);
main()
{
graph *g;
//bool directed;
initialize_graph(g);
read_graph(g,FALSE);
insert_edge(g, 3, 2, FALSE);
print_graph(g);
return 0;
}
void initialize_graph(graph *g)
{
int i; /* counter */
g -> nvertices = 0;
g -> nedges = 0;
for (i=1; i<=MAXV; i++) g->degree = 0;
}
void read_graph(graph *g, bool directed)
{
int i; /* counter */
int m; /* number of edges */
int x, y; /* vertices in edge (x,y) */
initialize_graph(g);
printf("Enter the number of verticies and edges,respectively: ");
scanf("%d %d",&(g->nvertices),&m);
for (i=1; i<=m; i++) {
scanf("%d %d",&x,&y);
insert_edge(g,x,y,directed);
}
}
void insert_edge(graph *g, int x, int y, bool directed)
{
//bool FALSE,TRUE;
if (g->degree[x] > MAXDEGREE)
printf("Warning: insertion(%d,%d) exceeds max degree\n",x,y);
g->edges[x][g->degree[x]] = y;
g->degree[x] ++;
if (directed == FALSE)
insert_edge(g,y,x,TRUE);
else
g->nedges ++;
}
void delete_edge(graph *g, int x, int y, bool directed)
{
int i; /* counter */
// bool FALSE,TRUE;
for (i=0; i<g->degree[x]; i++)
if (g->edges[x] == y) {
g->degree[x] --;
g->edges[x] = g->edges[x][g->degree[x]];
if (directed == FALSE)
delete_edge(g,y,x,TRUE);
return;
}
printf("Warning: deletion(%d,%d) not found in g.\n",x,y);
}
void print_graph(graph *g)
{
int i,j; /* counters */
for (i=1; i<=g->nvertices; i++) {
printf("%d: ",i);
for (j=0; j<g->degree; j++)
printf(" %d",g->edges[j]);
printf("\n");
}
}