void mincost1(int city) { int ncity; vis1[city]=1; printf("%d --> ",city); ncity=least1(city); if(ncity==9999) { ncity=1; printf("%d ",ncity); cost=cost+a[city][ncity]; return; } mincost1(ncity); }
stfu_status_t stfu_n_add_data(stfu_instance_t *i, uint32_t ts, uint16_t seq, uint32_t pt, void *data, size_t datalen, uint32_t timer_ts, int last) { uint32_t index = 0; stfu_frame_t *frame; size_t cplen = 0; int good_ts = 0; if (!i->samples_per_packet && ts && i->last_rd_ts) { i->ts_diff = ts - i->last_rd_ts; if (i->last_ts_diff == i->ts_diff) { if (++i->same_ts == 5) { i->samples_per_packet = i->ts_diff; if (i->max_drift && i->samples_per_packet) { i->drift_max_dropped = (i->samples_per_second * 2) / i->samples_per_packet; } } } else { i->same_ts = 0; } i->last_ts_diff = i->ts_diff; if (!i->samples_per_packet) { i->last_rd_ts = ts; return STFU_IT_FAILED; } } if (timer_ts) { if (ts && !i->ts_offset) { i->ts_offset = timer_ts - ts; } i->ts_drift = ts + (i->ts_offset - timer_ts); if (i->ts_offset && i->ts_drift > 0) { i->ts_offset = timer_ts - ts; i->ts_drift = ts + (i->ts_offset - timer_ts); } if (i->max_drift) { if (i->ts_drift < i->max_drift) { if (++i->drift_dropped_packets < i->drift_max_dropped) { stfu_log(STFU_LOG_EMERG, "%s TOO LATE !!! %u \n\n\n", i->name, ts); stfu_n_sync(i, 1); //return STFU_ITS_TOO_LATE; } } else { i->drift_dropped_packets = 0; } } } if (i->sync_in) { good_ts = 1; i->sync_in = 0; } else { if ((ts && ts == i->last_rd_ts + i->samples_per_packet) || (i->last_rd_ts > 4294900000u && ts < 5000)) { good_ts = 1; } if (i->last_wr_ts) { if ((ts <= i->last_wr_ts && (i->last_wr_ts != UINT_MAX || ts == i->last_wr_ts))) { if (stfu_log != null_logger && i->debug) { stfu_log(STFU_LOG_EMERG, "%s TOO LATE !!! %u \n\n\n", i->name, ts); } stfu_n_sync(i, 1); return STFU_ITS_TOO_LATE; } } } if (good_ts) { i->period_clean_count++; i->session_clean_count++; } i->period_packet_in_count++; i->session_packet_in_count++; i->period_need_range_avg = i->period_need_range / least1(i->period_missing_count); if (i->period_missing_count > i->qlen * 2) { if (stfu_log != null_logger && i->debug) { stfu_log(STFU_LOG_EMERG, "%s resize %u %u\n", i->name, i->qlen, i->qlen + 1); } stfu_n_resize(i, i->qlen + 1); stfu_n_reset_counters(i); } else { if (i->qlen > i->orig_qlen && (i->consecutive_good_count > i->decrement_time || i->period_clean_count > i->decrement_time)) { stfu_n_resize(i, i->qlen - 1); stfu_n_reset_counters(i); stfu_n_sync(i, i->qlen); } } i->diff = 0; if (i->last_wr_ts) { if (ts < 1000 && i->last_wr_ts > (UINT_MAX - 1000)) { i->diff = abs((int)(((UINT_MAX - i->last_wr_ts) + ts) / i->samples_per_packet)); } else if (ts) { i->diff = abs((int)(i->last_wr_ts - ts)) / i->samples_per_packet; } } i->diff_total += i->diff; if ((i->period_packet_in_count > i->period_time)) { i->period_packet_in_count = 0; if (i->period_missing_count == 0 && i->qlen > i->orig_qlen) { stfu_n_resize(i, i->qlen - 1); stfu_n_sync(i, i->qlen); } stfu_n_reset_counters(i); } if (stfu_log != null_logger && i->debug) { stfu_log(STFU_LOG_EMERG, "I: %s %u/%u i=%u/%u - g:%u/%u c:%u/%u b:%u - %u:%u - %u %d %u %u %d %d %d/%d\n", i->name, i->qlen, i->max_qlen, i->period_packet_in_count, i->period_time, i->consecutive_good_count, i->decrement_time, i->period_clean_count, i->decrement_time, i->consecutive_bad_count, ts, ts / i->samples_per_packet, i->period_missing_count, i->period_need_range_avg, i->last_wr_ts, ts, i->diff, i->diff_total / least1(i->period_packet_in_count), i->ts_drift, i->max_drift); } if (last || i->in_queue->array_len == i->in_queue->array_size) { stfu_n_swap(i); } if (last) { return STFU_IM_DONE; } index = i->in_queue->array_len++; assert(index < i->in_queue->array_size); frame = &i->in_queue->array[index]; if (i->in_queue->array_len == i->in_queue->array_size) { stfu_n_swap(i); } if ((cplen = datalen) > sizeof(frame->data)) { cplen = sizeof(frame->data); } i->last_rd_ts = ts; i->packet_count++; memcpy(frame->data, data, cplen); frame->pt = pt; frame->ts = ts; frame->seq = seq; frame->dlen = cplen; frame->was_read = 0; return STFU_IT_WORKED; }