SDUT OJ 2138 最短路
2013-02-26 21:10
141 查看
#include<stdio.h> #include<stdlib.h> #include<string.h> int n,h[1010]; struct M { int data; struct M *next; }*head[1010]; struct Q { int step; int site; }; void init() { int i; for(i = 1;i <= n; i++) { head[i] = (struct M *)malloc(sizeof(struct M)); head[i]->data = -1; head[i]->next = NULL; } } void link(int u,int v) { struct M *p1,*p2,*q; q = (struct M * )malloc(sizeof(struct M)); q->next = NULL; q->data = v; for(p1 = head[u],p2 = p1->next;p2 != NULL; p1 = p1->next,p2 = p2->next) { if(p1->data < v && p2->data > v) { q->next = p1->next; p1->next = q; return; } else if(p2->data == v) {free(q);return;} } p1->next = q; } int seek(int mb) { int s,e,temp,step; struct M *p; struct Q q[1010]; s = e = 0; q[e].site = mb; q[e++].step = 0; while(s < e) { mb = q[s].site; temp = q[s++].step; for(p = head[mb];p != NULL;p = p->next) { if(!h[p->data]) { if(p->data == 1) return temp; q[e].site = p->data; q[e++].step = temp + 1; h[p->data] = 1; } } } return -1; } int main() { int m,i,u,v,step; while(scanf("%d %d",&n,&m) == 2) { if(n == 1) {printf("0\n");continue;} init(); for(i = 0;i < m; i++) { scanf("%d %d",&u,&v); link(u,v); } memset(h,0,sizeof(h)); h = 1; step = seek(n); if(step >= 0) printf("%d\n",step+1); else printf("NO\n"); } return 0; }
相关文章推荐
- SDUT OJ 2138 最短路
- SDUT OJ 2138 BFS 判断可达性 2139 BFS 从起始点到目标点的最短步数
- SDUT OJ 2138 图结构练习——BFSDFS——判断可达性
- SDUT OJ 2138 图结构练习——BFSDFS——判断可达性
- UVA 11374 Airport Express (最短路dijkstra+枚举+边的输出)
- 关于最短路的想法&&问题
- HDU 2851 (最短路)
- Hrbust 2160 Hunter【最短路SFPA+状压dp】好题!
- cdoj 30 最短路 flyod
- Silver Cow Party 【双向最短路】
- 河南第八届acm-C最少换乘 【最短路 建模】
- TopCoder SRM 710 Div2 Hard MinMaxMax Floyd最短路变形
- hdu - 2066 一个人的旅行(基础最短路)
- POJ3255(次短路大法好,dij大法好)
- [转载]方兴东:创业第一怕是什么?遭遇消极的“短路”
- poj Wormholes (最短路 spfa Bellman-Ford 算法 邻接表实现)
- k短路-洛谷P2483 [SDOI2010]魔法猪学院
- 单源最短路 Dijkstra O(mlogn) (类实现)
- hdu2544最短路——spfa
- POJ-1502 MPI Maelstrom(最短路)