/* * Copyright 1997, Regents of the University of Minnesota * * checkgraph.c * * This file contains routines related to I/O * * Started 8/28/94 * George * */ #include /************************************************************************* * This function checks if a graph is valid **************************************************************************/ idxtype CheckGraph(GraphType *graph) { idxtype i, j, k, l; idxtype nvtxs, ncon, err=0; idxtype 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) { mprintf("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) { mprintf("Normalized vwgts don't sum to one. Weight %D = %.8f.\n", j, ntvwgts[j]); err++; } } } /* mprintf("errs: %D, adjncy: [%D %D], adjwgt: [%D %D]\n", err, minedge, maxedge, minewgt, maxewgt); if (ncon > 1) { for (j=0; j 0) { mprintf("A total of %D errors exist in the input file. Correct them, and run again!\n", err); } gk_free((void **)&htable, LTERM); return (err == 0 ? 1 : 0); }