XMUT 1108 雾霾大作战

本文回顾了图论中最短路径问题,并提供了一个简洁的Dijkstra算法实现。该算法适用于带权图,通过不断更新节点间的距离来寻找两点间的最短路径。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        

        


       图论中最短路问题,太久没看,竟然把算法忘了。今天复习了一下(用我自己写的项目论文),其实思想很简单的,以后比赛要是怕忘记,就把算法整理好带去得了。

       比赛前是随便弄一段以前写的最短路代码带去现场的,结果不会用,折腾了半天才搞出来。这次吸取教训,把模板的衔接性写好一点,同时我把Dijkstra()故意改的特别短,这样做模板方便,抄的快啊大笑

#include <iostream>
using namespace std;

#define MAXN 50		// 题目可能出现的最大顶点数
#define Inf 100000

void GetData(int arcs[][MAXN], int & N)
{
	int i, j;

	cin >> N;
	for(i=0; i<N-1; i++)
	{
		arcs[i][i] = Inf;
		for(j=i+1; j<N; j++)
		{
			cin >> arcs[i][j];
			arcs[j][i] = arcs[i][j];
		}
	}
	arcs[i][i] = Inf;
}

// 下标均从0开始计,N为顶点总数+1
// 简称arcs->a, dist->d, visited->v.
int Dijkstra(int a[][MAXN],int N,int v1,int v2)
{
	int i, p, d[MAXN], t=Inf; bool v[MAXN]={0};
	for(v[v1]=1,i=0;i<N;i++) d[i]=a[v1][i]; // 给dist赋值
	do
	{
		for(i=0;i<N;i++)if(!v[i]&&d[i]<t) t=d[i],p=i; // 找未标记中的最小值
		for(v[p]=1,i=0;i<N;i++)if(!v[i])if(t=d[p]+a[p][i],t<d[i]) d[i]=t; // 更新dist
	}while(t=Inf, p!=v2);
	return d[p];
}

int main()
{
	int arcs[MAXN][MAXN],N;
	GetData(arcs,N);
	cout << Dijkstra(arcs,N,0,N-1) << endl;
	return 0;
}


package sfw.xmut.guomao.aspect; import sfw.xmut.guomao.entity.OperationLog; import sfw.xmut.guomao.mapper.OperationLogMapper; import sfw.xmut.guomao.utils.ServletUtil; import jakarta.servlet.http.HttpServletRequest; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import java.time.LocalDateTime; @Aspect @Component public class OperationLogAspect { private final OperationLogMapper logMapper; public OperationLogAspect(OperationLogMapper logMapper) { this.logMapper = logMapper; } @Around("execution(* sfw.xmut.guomao.controller.*.*(..))") public Object around(ProceedingJoinPoint joinPoint) throws Throwable { ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes(); HttpServletRequest request = attributes.getRequest(); if (request.getRequestURI().endsWith("/operationLog/page")) { return joinPoint.proceed(); } long startTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); long spendTime = System.currentTimeMillis() - startTime; OperationLog log = new OperationLog(); log.setUserName("admin"); // TODO: Get from JWT token log.setOperationType(request.getRequestURI()); log.setOperationMethod(request.getMethod()); log.setRequestUrl(request.getRequestURL().toString()); log.setOperationIp(ServletUtil.getClientIP(request)); log.setOperationStatus("成功"); log.setLastOperationTime(LocalDateTime.now()); logMapper.insert(log); return result; } }log.setUserName("admin"); // TODO: Get from JWT token 这一行代码怎么把他改成不管哪个用户登录这个管理系统日志上面都可以更新,不要像这个admin锁住固定住不管谁登录都是显示他的名称
最新发布
06-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值