当前位置:网站首页>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;
}
边栏推荐
猜你喜欢

Tensorflow realize parameter adjustment of linear equations

【C language】动态数组的创建和使用

wait系统调用

【精华文】C语言结构体特殊情况分析:结构体指针 / 基本数据类型指针,指向其他结构体

PTA 实验7-5 输出大写英文字母(10 分)

fork创建多个子进程

七夕?程序员不存在的~

【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读

enum in c language

ICML 2022 | Out-of-Distribution检测与深最近的邻居
随机推荐
1008 Elevator (20分)
x86异常处理与中断机制(3)中断处理过程
FreeRTOS任务创建源码分析
PTA 指定位置输出字符串(c)
linux mysql操作的相关命令
fork创建多个子进程
STM32使用静态队列保存数据
1009 Product of Polynomials C语言多项式乘积(25分)
实现strcat函数
Numpy常用操作博客合集
c语言函数的递归调用(汉诺塔问题,楼梯递归问题等)
最长回文子串
【VIBE: Video Inference for Human Body Pose and Shape Estimation】论文阅读
MySQL传统方案和通过SSH连接哪个好?
CentOS6.5 32bit安装Oracle-11gR2步骤说明
GOPROXY 中国代理
1007 Maximum Subsequence Sum (25分)
The use of C language typedef 】 : structure, basic data types, and array
激光条纹中心提取——Steger
vite的原理,手写vite