博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj2457
阅读量:6224 次
发布时间:2019-06-21

本文共 1489 字,大约阅读时间需要 4 分钟。

最短路

ContractedBlock.gif
ExpandedBlockStart.gif
View Code
#include 
#include
#include
#include
using namespace std; #define maxm 50005 #define maxn 1005 struct Edge {
int v, next; }edge[maxm * 2]; int n, m; int head[maxn]; int ecount; int from[maxn]; int q[maxn]; int stk[maxn]; bool vis[maxn]; void addedge(int a, int b) {
edge[ecount].v = b; edge[ecount].next = head[a]; head[a] = ecount++; } void input() {
scanf("%d%d", &m, &n); ecount = 0; memset(head, -1, sizeof(head)); for (int i = 0; i < m; i++) {
int a, b; scanf("%d%d", &a, &b); a--; b--; addedge(a, b); } } void bfs() {
memset(vis, 0, sizeof(vis)); int front = 0; int rear = 0; q[rear++] = 0; vis[0] = true; while (front != rear) {
int u = q[front++]; for (int i = head[u]; i != -1; i = edge[i].next) {
int v = edge[i].v; if (!vis[v]) {
from[v] = u; q[rear++] = v; vis[v] = true; if (v == n - 1) return; } } } } void print() {
int a = n - 1; int top = 0; while (a != 0) {
stk[top++] = a; a = from[a]; } stk[top++] = 0; printf("%d\n", top); for (int i = top - 1; i >= 0; i--) printf("%d\n", stk[i] + 1); } int main() {
//freopen("t.txt", "r", stdin); input(); bfs(); if (!vis[n - 1]) printf("-1\n"); else print(); return 0; }

转载地址:http://dpyna.baihongyu.com/

你可能感兴趣的文章
Vue.js 与 ActiveX 控件
查看>>
DVWA学习笔记
查看>>
C语言
查看>>
匈牙利表示法
查看>>
hiho一下115周 网络流
查看>>
python之装饰器
查看>>
java笔记高级部分
查看>>
PostgreSQL 查看单表大小
查看>>
apex透视自瞄无后子弹追踪飞天加速辅助
查看>>
深入浅出JQuery (三) 图片预览效果
查看>>
第一个sprint冲刺第二天
查看>>
工作学习周总结#8
查看>>
Spring 接口代理 类代理
查看>>
How to Verify Email Address
查看>>
java - map、collections常见方法、泛型上下界
查看>>
asp.net 目录树
查看>>
判断Array/Object
查看>>
flex布局
查看>>
修改 jquery easyui 表单验证默认的样式
查看>>
JavaScript
查看>>