23 int i, ii, j, k, nvtxs, cnvtxs, maxidx, avgdegree;
24 idxtype *xadj, *vwgt, *adjncy, *adjwgt, *adjwgtsum;
25 idxtype *match, *cmap, *degrees, *perm, *tperm;
26 float rtemp1, rtemp2, maxwgt;
45 avgdegree = (int) 0.7*(xadj[nvtxs]/nvtxs);
46 for (i=0; i<nvtxs; i++)
47 degrees[i] = (xadj[i+1]-xadj[i] > avgdegree ? avgdegree : xadj[i+1]-xadj[i]);
53 for (ii=0; ii<nvtxs; ii++) {
57 if (xadj[i] < xadj[i+1])
61 for (j=nvtxs-1; j>ii; j--) {
63 if (match[k] ==
UNMATCHED && xadj[k] < xadj[k+1]) {
69 cmap[i] = cmap[maxidx] = cnvtxs++;
76 for (; ii<nvtxs; ii++) {
83 rtemp1 = 1.0/adjwgtsum[i];
85 for (j=xadj[i]; j<xadj[i+1]; j++) {
88 rtemp2 = adjwgt[j] *(rtemp1 + 1.0/adjwgtsum[k]);
89 if (match[k] ==
UNMATCHED && maxwgt < rtemp2 && vwgt[i]+vwgt[k] <= ctrl->
maxvwgt) {
95 cmap[i] = cmap[maxidx] = cnvtxs++;
118 int i, ii, j, k, nvtxs, cnvtxs, maxidx;
119 idxtype *xadj, *vwgt, *adjncy, *adjwgt, *adjwgtsum;
121 float rtemp1, rtemp2, maxwgt;
125 nvtxs = graph->
nvtxs;
139 for (ii=0; ii<nvtxs; ii++) {
145 rtemp1 = 1.0/adjwgtsum[i];
148 for (j=xadj[i]; j<xadj[i+1]; j++) {
150 rtemp2 = adjwgt[j] *(rtemp1 + 1.0/adjwgtsum[k]);
152 if (match[k] ==
UNMATCHED && maxwgt < rtemp2 && vwgt[i]+vwgt[k] <= ctrl->
maxvwgt) {
158 cmap[i] = cmap[maxidx] = cnvtxs++;
177 int i, ii, j, nvtxs, cnvtxs, maxidx;
178 idxtype *xadj, *vwgt, *adjncy, *adjwgt;
183 nvtxs = graph->
nvtxs;
196 for (ii=0; ii<nvtxs; ii++) {
203 for (j=xadj[i]; j<xadj[i+1]; j++) {
204 if (match[adjncy[j]] ==
UNMATCHED && vwgt[i]+vwgt[adjncy[j]] <= ctrl->
maxvwgt) {
210 cmap[i] = cmap[maxidx] = cnvtxs++;
230 int i, ii, j, nvtxs, cnvtxs, maxidx;
236 nvtxs = graph->
nvtxs;
247 for (ii=0; ii<nvtxs; ii++) {
254 for (j=xadj[i]; j<xadj[i+1]; j++) {
261 cmap[i] = cmap[maxidx] = cnvtxs++;
283 int i, ii, j, k, nvtxs, cnvtxs, maxidx, maxwgt;
284 idxtype *xadj, *vwgt, *adjncy, *adjwgt;
289 nvtxs = graph->
nvtxs;
302 for (ii=0; ii<nvtxs; ii++) {
310 for (j=xadj[i]; j<xadj[i+1]; j++) {
312 if (match[k] ==
UNMATCHED && maxwgt < adjwgt[j] && vwgt[i]+vwgt[k] <= ctrl->
maxvwgt) {
318 cmap[i] = cmap[maxidx] = cnvtxs++;
339 int i, ii, j, k, nvtxs, cnvtxs, maxidx, maxwgt, avgdegree;
340 idxtype *xadj, *vwgt, *adjncy, *adjwgt;
341 idxtype *match, *cmap, *degrees, *perm, *tperm;
345 nvtxs = graph->
nvtxs;
359 avgdegree = (int) 0.7*(xadj[nvtxs]/nvtxs);
360 for (i=0; i<nvtxs; i++)
361 degrees[i] = (xadj[i+1]-xadj[i] > avgdegree ? avgdegree : xadj[i+1]-xadj[i]);
367 for (ii=0; ii<nvtxs; ii++) {
371 if (xadj[i] < xadj[i+1])
375 for (j=nvtxs-1; j>ii; j--) {
377 if (match[k] ==
UNMATCHED && xadj[k] < xadj[k+1]) {
383 cmap[i] = cmap[maxidx] = cnvtxs++;
390 for (; ii<nvtxs; ii++) {
398 for (j=xadj[i]; j<xadj[i+1]; j++) {
399 if (match[adjncy[j]] ==
UNMATCHED && maxwgt < adjwgt[j] && vwgt[i]+vwgt[adjncy[j]] <= ctrl->
maxvwgt) {
405 cmap[i] = cmap[maxidx] = cnvtxs++;
#define IFSET(a, flag, cmd)
void Match_SHEMN(CtrlType *ctrl, GraphType *graph)
void Match_RM(CtrlType *ctrl, GraphType *graph)
void Match_SHEM(CtrlType *ctrl, GraphType *graph)
void Match_RM_NVW(CtrlType *ctrl, GraphType *graph)
void Match_HEM(CtrlType *ctrl, GraphType *graph)
void Match_HEMN(CtrlType *ctrl, GraphType *graph)
#define CreateCoarseGraph_NVW
#define CreateCoarseGraph
#define BucketSortKeysInc