******** fig9.33 ********** void weighted_negative( TABLE T ) /* assume T is initialized as in Fig 9.18 */ { QUEUE Q; vertex v, w; /*1*/ Q = create_queue( NUM_VERTEX ); make_null( Q ); /*2*/ enqueue( s, Q ); /* enqueue the start vertex s */ /*3*/ while( !is_empty( Q ) ) { /*4*/ v = dequeue( Q ); /*5*/ for each w adjacent to v /*6*/ if( T[v].dist + c(v,w) < T[w].dist ) /*update w */ { /*7*/ T[w].dist = T[v].dist + c(v,w); /*8*/ T[w].path = v; /*9*/ if( w is not already in Q ) /*10*/ enqueue( w, Q ); } } /*11*/ dispose_queue( Q ); }