最短路:HDU2066

一个人的旅行

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 57452    Accepted Submission(s): 19069


 

Problem Description

虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。

 

 

Input

输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。

 

 

Output

输出草儿能去某个喜欢的城市的最短时间。

 

 

Sample Input


 

6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10

 

 

Sample Output


 

9

 

一个人只能从一个城市去临近城市坐火车去想去的城市,求去其中某个想去的城市的最近距离

添加超级源点就行 

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
#define N 1005 
#define INF 0x3f3f3f3f
long long c[N][N], p[N][N], dis[N], cost[N];
bool vis[N];
int n, m; 
void dijkstra(int s)
{
	for(int i = 1; i <= n; i++) dis[i] = INF;
	memset(vis, false, sizeof(vis));
	memset(cost, INF, sizeof(cost));
	dis[s] = 0, cost[s] = 0;
	for(int i = 1; i <= n; i++)
	{
		int k = -1;
        	long long minn = INF;
		for(int j = 1; j <= n; j++)
		{
			if(!vis[j] && dis[j] < minn)
			{
				minn = dis[j];
				k = j;
			}
		}
		if(k == -1) break;
		vis[k] = true;
		for(int j = 1; j <= n; j++)
		{
			if(!vis[j])
			{
				if(dis[j] > dis[k] + c[k][j])
				{
					dis[j] = dis[k] + c[k][j];
					cost[j] = cost[k] + p[k][j];
				}
				else if(dis[j] == dis[k] + c[k][j] && cost[j] > cost[k] + p[k][j])
					cost[j] = cost[k] + p[k][j];
			}
		}
	}
}
int main()
{
	while(~scanf("%d%d", &n, &m))
	{
		if(n == 0 && m == 0) break;
		memset(c, INF, sizeof(c));
		memset(p ,INF, sizeof(p));
		for(int i = 0; i < m; i++)
		{
			int u, v;
			long long d, w;
			scanf("%d%d%lld%lld", &u, &v, &d, &w);
			if(d < c[u][v])
			{
				c[u][v] = c[v][u] = d;
				p[u][v] = p[v][u] = w;
			}
		}
		int s, e;
		scanf("%d%d", &s, &e);
		dijkstra(s);
		printf("%lld %lld\n", dis[e], cost[e]);
	}
	return 0;
}
/*
5 6
1 2 1 3
2 3 1 4
1 3 2 5
1 4 3 1
4 3 4 1
3 5 3 6
1 5
*/

 

本课题设计了一种利用Matlab平台开发的植物叶片健康状态识别方案,重点融合了色彩与纹理双重特征以实现对叶片病害的自动化判别。该系统构建了直观的图形操作界面,便于用户提交叶片影像并快速获得分析结论。Matlab作为具备高效数值计算与数据处理能力的工具,在图像分析与模式分类领域应用广泛,本项目正是借助其功能解决农业病害监测的实际问题。 在色彩特征分析方面,叶片影像的颜色分布常与其生理状态密切相关。通常,健康的叶片呈现绿色,而出现黄化、褐变等异常色彩往往指示病害或虫害的发生。Matlab提供了一系列图像处理函数,例如可通过色彩空间转换与直方图统计来量化颜色属性。通过计算各颜色通道的统计参数(如均值、标准差及主成分等),能够提取具有判别力的色彩特征,从而为不同病害类别的区分提供依据。 纹理特征则用于描述叶片表面的微观结构与形态变化,如病斑、皱缩或裂纹等。Matlab中的灰度共生矩阵计算函数可用于提取对比度、均匀性、相关性等纹理指标。此外,局部二值模式与Gabor滤波等方法也能从多尺度刻画纹理细节,进一步增强病害识别的鲁棒性。 系统的人机交互界面基于Matlab的图形用户界面开发环境实现。用户可通过该界面上传待检图像,系统将自动执行图像预处理、特征抽取与分类判断。采用的分类模型包括支持向量机、决策树等机器学习方法,通过对已标注样本的训练,模型能够依据新图像的特征向量预测其所属的病害类别。 此类课题设计有助于深化对Matlab编程、图像处理技术与模式识别原理的理解。通过完整实现从特征提取到分类决策的流程,学生能够将理论知识与实际应用相结合,提升解决复杂工程问题的能力。总体而言,该叶片病害检测系统涵盖了图像分析、特征融合、分类算法及界面开发等多个技术环节,为学习与掌握基于Matlab的智能检测技术提供了综合性实践案例。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值