SDUT OJ 2138 最短路

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<string.h>
 4 
 5 int n,h[1010];
 6 
 7 struct M
 8 {
 9     int data;
10     struct M *next;
11 }*head[1010];
12 
13 struct Q
14 {
15     int step;
16     int site;
17 };
18 
19 void init()
20 {
21     int i;
22     for(i = 1;i <= n; i++)
23     {
24         head[i] = (struct M *)malloc(sizeof(struct M));
25         head[i]->data = -1;
26         head[i]->next = NULL;
27     }
28 }
29 
30 void link(int u,int v)
31 {
32     struct M *p1,*p2,*q;
33     q = (struct M * )malloc(sizeof(struct M));
34     q->next = NULL;
35     q->data = v;
36     for(p1 = head[u],p2 = p1->next;p2 != NULL; p1 = p1->next,p2 = p2->next)
37     {
38         if(p1->data < v && p2->data > v)
39         {
40             q->next = p1->next;
41             p1->next = q;
42             return;
43         }
44         else if(p2->data == v) {free(q);return;}
45     }
46     p1->next = q;
47 }
48 
49 int seek(int mb)
50 {
51     int s,e,temp,step;
52     struct M *p;
53     struct Q q[1010];
54     s = e = 0;
55     q[e].site = mb;
56     q[e++].step = 0;
57     while(s < e)
58     {
59         mb = q[s].site;
60         temp = q[s++].step;
61         for(p = head[mb];p != NULL;p = p->next)
62         {
63             if(!h[p->data])
64             {
65                 if(p->data == 1) return temp;
66                 q[e].site = p->data;
67                 q[e++].step = temp + 1;
68                 h[p->data] = 1;
69             }
70         }
71     }
72     return -1;
73 }
74 
75 int main()
76 {
77     int m,i,u,v,step;
78     while(scanf("%d %d",&n,&m) == 2)
79     {
80         if(n == 1) {printf("0\n");continue;}
81         init();
82         for(i = 0;i < m; i++)
83         {
84             scanf("%d %d",&u,&v);
85             link(u,v);
86         }
87         memset(h,0,sizeof(h));
88         h[n] = 1;
89         step = seek(n);
90         if(step >= 0) printf("%d\n",step+1);
91         else printf("NO\n");
92     }
93     return 0;
94 }
原文地址:https://www.cnblogs.com/zmx354/p/2934247.html