• 洛谷 SP338 ROADS


    思路

    dfs(只不过要用邻接表存)邻接表是由表头结点和表结点两部分组成,其中表头结点存储图的各顶点,表结点用单向链表存储表头结点所对应顶点的相邻顶点(也就是表示了图的边)。在有向图里表示表头结点指向其它结点(a->b),无向图则表示与表头结点相邻的所有结点(a—b)

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <iostream>
     4 using namespace std;
     5 const int N = 1010;
     6 const int INF = 1e6;
     7 
     8 struct node {
     9     int s,e,len,cost;
    10     int nxt;
    11 } cc[10*N];
    12 
    13 int n,m,num,head[N],vis[N];
    14 int ans;
    15 //插入一条边 
    16 void cr(int a,int b,int c,int d) {
    17     cc[num].s=a;
    18     cc[num].e=b;
    19     cc[num].len=c;
    20     cc[num].cost=d;
    21     cc[num].nxt=head[a];//让插入的元素指向下一个 
    22     head[a]=num++;//让之前的指向插入的 
    23 }
    24 //x表示当前的起点,y表示走过路径的长度,z表示当前的总费用 
    25 void dfs(int x,int y,int z) {
    26     if(y>ans)return;
    27     if(x==n && z>=0 && y<ans) ans=y;
    28     for(int i=head[x]; i!=-1; i=cc[i].nxt) {
    29         int u=cc[i].e;
    30         if(!vis[u] && z >= cc[i].cost) {
    31             vis[u]=1;
    32             dfs(u,y+cc[i].len,z-cc[i].cost);
    33             vis[u]=0;
    34         }
    35     }
    36 }
    37 
    38 int main() {
    39     int i,a,b,c,d,k;
    40     int yyy;
    41     cin>>yyy;
    42     while(yyy--) {
    43         cin>>k>>n>>m;
    44         num=0;
    45         memset(head,-1,sizeof(head));
    46         for(i=0; i<m; i++) {
    47             scanf("%d%d%d%d",&a,&b,&c,&d);
    48             cr(a,b,c,d);
    49         }
    50         ans=INF;
    51         memset(vis,0,sizeof(vis));
    52         dfs(1,0,k);
    53 //      printf(ans<INF?"%d
    ":"-1
    ",ans);
    54         if(ans<INF)cout<<ans<<endl;
    55         else cout<<-1<<endl;
    56     }
    57 
    58     return 0;
    59 }
    请各位大佬斧正(反正我不认识斧正是什么意思)
  • 相关阅读:
    【爬虫】Python获取星巴克所有产品
    【爬虫】Java爬取省市县行政区域统计数据
    【PostgreSQL】下载安装PgSQL
    【Big Data】 DBeaver连接Phoenix
    【SpringMVC】 Controller接收深度复杂对象封装不到的问题
    【MybatisPlus】联表分页查询实现
    【爬虫】Java爬取KFC全国门店信息
    Optional类的初体验
    Oracle版本的xxljob
    idea中Git根据需要还原到指定版本
  • 原文地址:https://www.cnblogs.com/handsome-zyc/p/11237393.html
Copyright © 2020-2023  润新知