有一个简单的无向图,有 N个顶点,编号为 1到 N和 M条边,编号为 1到 M. 边缘 i连接着顶点 u i 和顶点 v i . 每个顶点都被涂成红色或蓝色。顶点的颜色...

您问的是一个二分图的染色问题。

二分图的染色问题是指在图中选择两种颜色,使得相邻的顶点没有相同的颜色。如果存在一种合法的染色方案,那么这个图是一个二分图。

在您给出的问题中,如果您要求高桥和青木同时移动到相邻的顶点,那么必须保证这两个顶点有不同的颜色。因此,如果图是一个二分图,那么高桥和青木可以同时从顶点1移动到顶点N。

如果图不是二分图,则不存在合法的染色方案,因此您必须输出-1。

如果图是二分图,您可以使用BFS来求出最短路径。在BFS中,每次移动高桥和青木到相邻的不同颜色顶点,并累加移动次数。在最后,您可以返回移动的次数。

下面是用C++代码实现的例子:

``` #include <bits/stdc++.h> using namespace std;

const int N=10010; int T,n,m,s,t; int h[N],e[N<<1],ne[N<<1],idx; int dist[N]; bool st[N]; int color[N];

void add(int a,int b) { e[idx]=b; ne[idx]=h[a]; h[a]=idx++; }

bool bfs() { memset(dist,0x3f,sizeof dist); memset(st,0,sizeof st);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值