• 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 }
  • 相关阅读:
    Spring AOP + Redis 实现针对用户的接口访问频率限制
    Flutter 圆形透明 Loading 弹窗
    VUE 自定义组件的双向数据绑定 和替代钩子
    10个前端技巧
    前端中的数据库
    cors 跨域问题
    promise解决回调地狱问题
    VUE框架JS组件的封装 --Vue.extend
    HBuilderX 用夜神模拟器运行vue项目
    vue关于axios 拦截器的使用
  • 原文地址:https://www.cnblogs.com/zmx354/p/2934247.html
Copyright © 2020-2023  润新知