我就是脑子被驴踢了之前才做不出来的。。呵呵哒
因为要求转换的最少,所以如果两个路由器之间能架构网络,那么距离就是1,然后如果之间可以建立网络但是k的个数超了也是不可以纳入更新的。
#include <cstdio>
#include <cstring>
#include <iostream>
#include <queue>
#include <cmath>
#include <cstdlib>
using namespace std;
#define maxn 220
#define ll long long
int dis[maxn][maxn],vis[maxn],num[maxn],ans[maxn];
int n,m,k;
ll r;
class node
{
public:
int x,y,flag;
}a[maxn];
queue<int>que;
void spfa()
{
//debug
//
for(int i=1;i<=n+m;i++)
{
ans[i]=-1;
}
ans[1]=0;
que.push(1);
vis[1]=1;
while(!que.empty())
{
int x=que.front();
que.pop();
vis[x]=0;
//printf("%d dis=%d num=%d\n",x,ans[x],num[x]);
for(int i=1;i<=n+m;i++)
{
if(dis[x][i]!=-1)
{
if(ans[i]==-1||ans[x]+dis[x][i]<ans[i])
{
if(a[i].flag==2)
{
if(num[x]+1>k) continue;
num[i]=n