/* * Copyright 1997, Regents of the University of Minnesota * * checkgraph.c * * This file contains routines related to I/O * * Started 8/28/94 * George * * $Id: checkgraph.c,v 1.1 2003/07/24 18:39:06 karypis Exp $ * */ #include /************************************************************************* * This function checks if a graph is valid **************************************************************************/ int CheckGraph(GraphType *graph) { int i, j, k, l; int nvtxs, ncon, err=0; int minedge, maxedge, minewgt, maxewgt; float minvwgt[MAXNCON], maxvwgt[MAXNCON]; idxtype *xadj, *adjncy, *adjwgt, *htable; float *nvwgt, ntvwgts[MAXNCON]; nvtxs = graph->nvtxs; ncon = graph->ncon; xadj = graph->xadj; nvwgt = graph->nvwgt; adjncy = graph->adjncy; adjwgt = graph->adjwgt; htable = idxsmalloc(nvtxs, 0, "htable"); if (ncon > 1) { for (j=0; j 1) { for (j=0; j maxvwgt[j]) ? nvwgt[i*ncon+j] : maxvwgt[j]; } } for (j=xadj[i]; j maxedge) ? k : maxedge; minewgt = (adjwgt[j] < minewgt) ? adjwgt[j] : minewgt; maxewgt = (adjwgt[j] > maxewgt) ? adjwgt[j] : maxewgt; if (i == k) { printf("Vertex %d contains a self-loop (i.e., diagonal entry in the matrix)!\n", i); err++; } else { for (l=xadj[k]; l 1) { for (j=0; j 0.0001) { printf("Normalized vwgts don't sum to one. Weight %d = %.8f.\n", j, ntvwgts[j]); err++; } } } /* printf("errs: %d, adjncy: [%d %d], adjwgt: [%d %d]\n", err, minedge, maxedge, minewgt, maxewgt); if (ncon > 1) { for (j=0; j 0) { printf("A total of %d errors exist in the input file. Correct them, and run again!\n", err); } GKfree(&htable, LTERM); return (err == 0 ? 1 : 0); }