الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

Graph Representation

مغلق
بدأه موظف في 25 نوفمبر 2005 · 0 رد · 403 مشاهدة · في ارشيف قسم C/C++
مشاركة: واتساب X فيسبوك تيليجرام
#1

السلام عليكم ورحمة الله وبركاته...

عندي سؤال في كود كتب بلغة السي، هدف الكود هو عمل 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");
	}
}

هذا الموضوع مغلق.

مواضيع مشابهة