求教,关于语法的问题

x_miracle 2020-03-08 04:33:22
		
for(int u=s,v;u!=t;x=d[u=v],printf("-%c",alpha(v)))
for(v=0;v<52;++v)
if(G[u][v] && forward(x,v)>=d[v])
break;


这是我看别人题解的一段代码。

完整题目是UVA10537 https://www.luogu.com.cn/problem/UVA10537

应该是最后输入的部分,可是循环里面是什么意思呢?

尤其是“ for(int u=s,v;u!=t;x=d[u=v],printf("-%c",alpha(v))) ”

题解的完整代码

#include <bits/stdc++.h>
#define MAXN 60
using namespace std;
const long long INF = -1ull/2;
bool vis[MAXN],G[MAXN][MAXN];
long long d[MAXN];
int read()
{
char s[9]; scanf("%s",s);
return isupper(s[0])?(s[0]-'A'):(s[0]-'a'+26);
}
char alpha(int u){
return u<26 ? 'A'+u : 'a'+(u-26);
//还剩多少东西;
}

long long forward(long long x,int v){
return v<26 ? (x-(x+19)/20) : (x-1);
//至少要拿着多少个东西到达节点u,交税后还剩d[u]个东西
}
long long back(int u)
{
if(u>=26) return d[u]+1;
long long x=d[u]*20/19; //初始值
while(forward(x,u)<d[u])
++x; //调整
return x;
}
void Dijkstra(int s,int t,int p)
{
int n=52; //总是有52个节点
memset(vis,0,sizeof(vis));
d[t]=p; vis[t]=1;
for(int i=0;i<n;++i)
if(i!=t)
d[i]=G[i][t]?back(t):INF;
while(!vis[s])
{
int u=-1;
for(int i=0;i<n;++i)
if(!vis[i] && (u<0 || d[i]<d[u]))
u=i;
vis[u]=1;
for(int i=0;i<n;++i)
if(!vis[i] && G[i][u])
d[i]=min(d[i],back(u));
}
return ;
}
int main()
{
freopen("in.txt","r",stdin);
int n,kase=0;
while(scanf("%d",&n)!=EOF && n!=-1 )
{
memset(G,0,sizeof(G));
for(int i=0;i<n;++i)
{
int u=read(),v=read();
if(u!=v)
G[u][v]=G[v][u]=1;
}
int p;
scanf("%d",&p);
int s=read(),t=read();
printf("Case %d:\n",++kase);
Dijkstra(s,t,p);
printf("%lld\n%c",d[s],alpha(s));
long long x=d[s];
for(int u=s,v;u!=t;x=d[u=v],printf("-%c",alpha(v)))
for(v=0;v<52;++v)
if(G[u][v] && forward(x,v)>=d[v])
break;
printf("\n");
}
return 0;
}

望大佬回复,谢谢
...全文
61 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧