Codevs1062路由选择

/*

#include<iostream>
#include<cstdio>
#include<cstring>
#define MAXN 301
using namespace std;
int a1[MAXN*MAXN],a2[MAXN*MAXN],a3[MAXN*MAXN];
int n,ans1,ans2,ans3,g[MAXN][MAXN],max1,s,t,ss[MAXN][MAXN],tot,pre[MAXN*MAXN];
bool r[MAXN],b[MAXN];
int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘) x=x*10+ch-48,ch=getchar();
    return x*f;
}
void print()
{
    printf("%d ",ans1);
    for(int i=n;i>=1;i--)
    if(a1[i]) printf("%d ",a1[i]);
    printf("\n");
    printf("%d ",ans2);
    for(int i=n;i>=1;i--)
    if(a2[i]) printf("%d ",a2[i]);
    printf("\n");
    printf("%d ",ans3);
    for(int i=n;i>=1;i--)
    if(a3[i]) printf("%d ",a3[i]);
    printf("\n");
}
void slove()
{
    int sum=0;int x=t;
    if(tot<ans1)
    {
        if(a2[1])
        {
            for(int i=1;i<=n;i++)
              a3[i]=a2[i];
            ans3=ans2;
        }
        if(a1[1])
        {
            for(int i=1;i<=n;i++)
                a2[i]=a1[i];
            ans2=ans1;
        }
        ans1=tot;
        memset(a1,0,sizeof(a1));
        while(x)
        {
            a1[++sum]=x;
            x=pre[x];
        }
        return ;
    }
    else if(tot<ans2)
    {
        if(a2[1])
        {
            for(int i=1;i<=n;i++)
              a3[i]=a2[i];
            ans3=ans2;
        }
        ans2=tot;
        memset(a2,0,sizeof(a2));
        while(x)
        {
            a2[++sum]=x;
            x=pre[x];
        }
        return ;
    }
    else if(tot<ans3)
    {
        memset(a3,0,sizeof(a3));
        ans3=tot;
        while(x)
        {
            a3[++sum]=x;
            x=pre[x];
        }
        return ;
    }
}
void dfs(int x)
{
    if(x==t)
    {
        slove();
    }
    for(int i=1;i<=n;i++)
      if(g[x][i]&&!r[i]&&g[x][i]!=max1)
      {
          tot+=g[x][i];g[x][i]=0;pre[i]=x;r[i]=true;
           dfs(i);
        tot-=ss[x][i];g[x][i]=ss[x][i];pre[i]=0;r[i]=false;
      }
}
int main()
{
    ans1=ans2=ans3=1e8;
    n=read();s=read();t=read();max1=read();
    for(int i=1;i<=n;i++)
      for(int j=1;j<=n;j++)
        g[i][j]=read(),ss[i][j]=g[i][j];
    r[s]=true;
    dfs(s);
    print();
}
时间: 2024-10-13 08:16:40

Codevs1062路由选择的相关文章

动态路由选择协议(三)链路状态路由选择协议

链路状态不同于距离矢量路由协议依照传闻进行路由选择的工作方式,原因是链路状态路由器从对等路由器那里获取第一手信息.每台路由器会产生一些关于自己.本地直连链路.这些链路的状态(以此而得名)和所有直连相连邻居的信息.这些信息从一台路由器传送到另外一台路由器,每台路由器都做一份信息拷贝,但是决不改动信息.最终目的是每台路由器都有一个相同的有关网络的信息,并且每台路由器可以独立地计算各自的最优路径. 链路状态协议,有时叫最短路径优先协议或分布式数据库协议,是围绕着图论中的一个著名算法--E.W.Dijk

IP路由选择

IP层在内存中有一个路由表,当有数据要发送或接收到的数据到达IP层时,都要在这个路由表中进行查找,具体查找过程如下: 搜索路由表,寻找能与目的IP地址完全匹配的表目.如果找到,则发送.否则,执行下一步. 搜索路由表,寻找能与目的网络号相匹配的表目.如果找到,则发送.否则,执行下一步. 搜索路由表,寻找标为"默认"的表目.如果找到,则发送.否则,执行下一步. 发送失败,则向应用层返回错误信息. 以下图为例,说明路由选择的具体流程. 主机bsdi要发送数据到外网的服务器192.48.96.

内部网关协议RIP 路由选择算法(距离向量)

RIP是一种基于距离向量的路由选择协议 RIP的距离就是指的跳数,没经过一个路由,就是一跳,RIP允许一跳路径最多经过15个路由器,所以16个的话就相当于不可以到达了 RIP协议的特点: 1:仅和相邻的路由进行交换信息, 2:交换的信息只是自己全部知道的信息 3:每隔30s更新一下 RIP协议主要使用的是距离向量算法 : 收到相邻路由器(其地址为 X)的一个 RIP 报文: (1) 先修改此 RIP 报文中的所有项目:把"下一跳"字段中的地址都改为 X,并把所有的"距离&qu

TCP/IP协议原理与应用笔记21:路由选择的方法

1. 路由选择的方法 (1)基本思想 不是收到IP分组后才能为其选路,而是预先获得所有的目的的路由(Routing Protocol) IP报文按预定的路由转发(route table) (2)预定路由:路由表(route table) 路由表 也可称为 转发表(forwarding table) 主机 和 路由器都用路由表实现报文的发送.转发 2. 路由表(route table)中包含的信息 (1)思想: 使用尽可能少的信息实现选路 (2)包含的信息: (3)举例: (4)讨论: 路由表的大

【TCP/IP】IP路由选择

IP层在内存中有一个路由表,当有数据要发送时.它要对该表进行一次搜索以确认转发地址.收到的数据到达IP层时,IP层会检查数据报的目的地址是否为本机IP或广播IP: 假设是.就依据IP首部协议字段的协议分发到对应的模块进行处理. 假设不是.那么: IP层被设为路由器功能.则对此数据报进行转发. 否则,丢弃该数据被报. 路由表内容例如以下所看到的: 字段 说明 目的IP地址 能够是网络地址.也能够是主机地址,由以下的标志字段区分 下一跳路由器IP地址 与当前网络接口直接相连的路由器或主机网络接口的I

第四章 动态路由选择协议

4.1 路由选择协议基础 路由算法应指明的内容: *向其他路由器传送网络可达信息的过程 *从其他路由器接收可达信息的过程 *基于现有的可达信息决策最优路由的过程以及在路由表中记录这些信息的过程 *响应,修正和通告网络中拓扑变化的过程 4.1.1 路径决策 4.1.2 度量 当有多条路由到达相同的目标网段时,路由器需要一种机制计算最优路径,度量metric是指派给路由的一种变量. 1.跳数 跳数Hop Count可简单记录路由跳数. 2.带宽 带宽Bandwidth会选择高带宽路径. 3.负载 负

热备份路由选择协议(HSRP)

热备份路由选择协议(HSRP) n HSRP概述 HSRP(Hot Standby Routing Protocol,热备份路由选择协议)是Cisco私有的一种技术,它确保了当网络边缘设备或接入链路出现故障时,用户通信能迅速并透明的恢复,以此为IP网络提供冗余性.通过应用HSRP,可使网络的正常运行时间接近100%,从而满足用户对网络可靠性的要求 热备份路由协议为IP网络提供了容错和增强的路由选择功能.通过使用同一个虚拟IP地址和虚拟MAC地址,LAN网段上的两台或多台路由器可以作为一台虚拟路由

Ember——{{outlet}}的内容是根据路由选择后动态获取

{{outlet}}的内容 是根据 路由选择 后 动态获取 的模板内容 路由:Ember程序的路由,它可以帮助管理应该程序的状态和用户导航所需资源的资源: 当我们的应用程序启动时,路由是负责显示模板,加载数据,以及管理应用程序的状态.

动态路由3--链路状态路由选择协议

1)  链路状态路由选择协议 入门:假如你现在在下沙沿江第一次要去古荡附近的公司报到,你不知道具体的路该怎么走,那该怎么办呢? 我们知道你可以在手机(路由器router)里面下载一个导航,在输入目的地后,导航会在他的各个区的地图表(路由表)中选择最优的路径去规划线路.那么,导航要达到这个目的,首先它必须有下沙沿江相连的6号大街(直连链路direct link)信息,下沙路的有没有在造地铁.堵不堵车(链路状态link state),到闸弄口后怎么转弯(直连邻居的信息).过了艮山东路是往体育场路还是