void rtupdate2(struct rtpkt *rcvdpkt) { int current_node = 2; printf("node2: current table\n"); printdt2(&dt2); int i = 0; int update_neighbors = 0; //update our table. int id = rcvdpkt->sourceid; int k = 0; int is_neighbor = 0; for (i = 0; i < 4; i++) { if (i == current_node){ continue; } if (dt2.costs[i][rcvdpkt->sourceid] > dt2.costs[rcvdpkt->sourceid][rcvdpkt->sourceid] + rcvdpkt->mincost[i]) { update_neighbors = 1; /* printf("i: %i\n", i); printf("rcvdpkt->sourceid: %i\n", rcvdpkt->sourceid); printf("dt2.costs[i][rcvdpkt->sourceid]: %i\n", dt2.costs[i][rcvdpkt->sourceid]); printf("dt2.costs[rcvdpkt->sourceid][rcvdpkt->sourceid]: %i\n", dt2.costs[rcvdpkt->sourceid][rcvdpkt->sourceid]); printf("mincost[i]: %i\n", rcvdpkt->mincost[i]);*/ dt2.costs[i][rcvdpkt->sourceid] = dt2.costs[rcvdpkt->sourceid][rcvdpkt->sourceid] + rcvdpkt->mincost[i]; } } printf("node2: new table\n"); printdt2(&dt2); printf("node2: updating neighbors\n"); if (update_neighbors == 1) { // update neighboring nodes. for (i = 0; i < 4; i++) { if (i == current_node) { continue; } struct rtpkt pkt; pkt.sourceid = current_node; pkt.destid = i; pkt.mincost[0] = mincost2(0); pkt.mincost[1] = mincost2(1); pkt.mincost[2] = mincost2(2); pkt.mincost[3] = mincost2(3); tolayer2(pkt); } } }
void mincost2(int city) { int ncity; printf("%d --> ",city); vis2[city]=1; ncity=least2(city); if(ncity==9999) { ncity=1; printf("%d ",ncity); cost=cost+a[city][ncity]; return; } mincost2(ncity); }
void main() { // input(); input(); printf("The approx path is \n"); mincost1(1); printf("The minimum approx cost incurred is %d\n",cost); approxcost=cost; cost=0; printf("The exact path is\n"); mincost2(1); printf("The minimum exact cost incurred is %d\n",cost); exactcost=cost; error=((approxcost-exactcost)/exactcost)*100.0; printf("TH percentage error in approximation is %f\n",error); }