1078 文化之旅

本文介绍了一种解决有限制的最短路径问题的方法,即在一个包含文化排斥约束的图中找到从起点到终点的最短路径。通过使用SPFA最短路径算法结合启发式搜索和剪枝策略,有效地处理了文化排斥条件。文章详细阐述了算法实现过程,包括邻接表存储、最短路径计算和搜索策略,并提供了具体的代码实现。
摘要由CSDN通过智能技术生成

1078 文化之旅

好像这个题是一个错误的,这是我见过这么多题目中,n<=100的题,真好
首先,这个题可以用最短路加上启发式搜索来解决这个题,然后用剪枝来过
看一下题目,如果他学习了这种文化,他就不能到达排斥这个文化的国家去
所以这次的最短路径,需要考虑排斥这个限制
所以我们先忽略文化排斥这个限制,跑一下最短路径,然后再用搜索判断一下文化排斥

-----------重新-----------
简单来说,就是给定一个图,给定一个起点终点,走一个最短路径
而且是有限制的
是有一个文化的限制
输入的是点的个数,边的个数,文化的个数,然后是终点起点
通过研究输入样例我们明白,对于文化排斥方面,会有0 1两种,分别表示排斥,并且这个排斥不是双向的
N行表示的是文化
M行就是表示边权,就和正常的表示一样

首先,我们不要管什么文化排斥不排斥,我们首先要考虑的是最短路径,这里采用的是spfa最短路径,邻接表进行存储
然后存储的时候我们再考虑什么文化排斥
大概就是这个思路
不要忘记剪枝,就是在走路的时候远远看见了死胡同了,就不需要接着走,直接掉头

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cstdlib>
using namespace std;
int n,k,m,s,t,ans=100000000;
int cnt=0;
int c[200];
int vis[200][200];
int visit[200];
struct node
{
   
    int to,next,value;
}e[20000];//存图数组 
int head[200];//邻接表数组 
int que[100000],qh=0,qt=0;//队列 队首 队末 
bool inq[1000];//判断当前i是否存在于队列里面 
int dist[1000];//单源路径 
void add(int u,int v,int w
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值