当前位置:网站首页>PAT1003
PAT1003
2022-08-09 11:09:00 【AlanLiu6】
dijstra算法,自己手敲了一遍。查了半天bug,哭哭。
https://pintia.cn/problem-sets/994805342720868352/problems/994805523835109376
#include<cstdio>
const int INF = 1e9+7;
int saveNum[505];
int road[505][505];
int dist[505];
int s[505];
int roadSum[505];
int saveSum[505];
/*
dijkstra
*/
void dijstra(int start,int num,int ending)
{
roadSum[start] = 1;
saveSum[start] = saveNum[start];
dist[start] = 0;
for(int i = 0;i < num;i++)
{
int minx = INF,t = 0;
for(int j = 0;j < num;j++)
{
if(dist[j] < minx && !s[j])
{
minx = dist[j];
t = j;
}
}
s[t] = 1;
for(int k = 0;k < num;k++)
{
if(road[t][k] + dist[t]< dist[k] && !s[k])
{
dist[k] = road[t][k] + dist[t];
saveSum[k] = saveSum[t] + saveNum[k];
roadSum[k] = roadSum[t];
}
else if(road[t][k] + dist[t] == dist[k] && !s[k])
{
roadSum[k] += roadSum[t];
if(saveSum[k] < saveSum[t] + saveNum[k])
saveSum[k] = saveSum[t] + saveNum[k];
}
}
if(t == ending) break; // 找到ending点 则停止计算
}
}
int main()
{
int cityNum,roadNum,start,ending;
scanf("%d %d %d %d",&cityNum,&roadNum,&start,&ending);
for(int i = 0;i < cityNum;i++)
{
dist[i] = INF; // 初始化dist
for(int j = 0;j < cityNum;j++) // 初始化road
{
if(i == j) road[i][j] = 0;
else road[i][j] = INF;
}
}
for(int i = 0;i < cityNum;i++)
{
scanf("%d",&saveNum[i]);
}
for(int i = 0;i < roadNum;i++)
{
int x,y,value;
scanf("%d %d %d",&x,&y,&value);
road[x][y] = value;
road[y][x] = value;
if(x == start)
dist[y] = value;
else if(y == start)
dist[x] = value;
}
dijstra(start,cityNum,ending);
printf("%d %d\n",roadSum[ending],saveSum[ending]);
return 0;
}
边栏推荐
猜你喜欢
Qt读写.ini配置文件
Netscope: Online visualization tool for neural network structures
MDK添加注释模板
ThreadLocal及其内存泄露分析
全网最简单解决OneNote中英字体不统一
Preparation for gold three silver four: how to successfully get an Ali offer (experience + interview questions + how to prepare)
CentOS6.5 32bit安装Oracle、ArcSde、Apache等配置说明
fork创建多个子进程
为什么组合优先于继承
性能测试(01)-jmeter元件-线程组、调试取样器
随机推荐
PTA习题 分类统计字符个数(C)
1008 Elevator (20分)
WebSocket
Solve 1. tensorflow runs using CPU but not GPU 2. GPU version number in tensorflow environment 3. Correspondence between tensorflow and cuda and cudnn versions 4. Check cuda and cudnn versions
Qt读写.ini配置文件
MATLAB代码实现三次样条插值
Beauty Values
最长回文子串
无刷无霍尔BLCD电机控制
PTA 换硬币
实现strcat函数
ECCV 2022 Oral | CCPL: 一种通用的关联性保留损失函数实现通用风格迁移
leetcode-搜索旋转排序数组-33
程序员的专属浪漫——用3D Engine 5分钟实现烟花绽放效果
uni-app 自带的picker封装一个日期-时间选择器
c语言函数的递归调用(汉诺塔问题,楼梯递归问题等)
faster-rcnn learn
Quartz的理解
Use gdb to debug multi-process programs, debug parent and child processes at the same time
∘(空心的点乘)的数学含义