求大神帮助 百练我爱北大,编程题目

【描述】
“红楼飞雪,一时英杰……”耳边传来了那熟悉的歌声。而这,只怕是我最后一次听到
这个声音了。
想当年,我们曾经怀着豪情壮志,许下心愿,走过静园,走过一体,走过未名湖畔的每
个角落。
想当年,我们也曾慷慨高歌,瞻仰民主与科学,瞻仰博雅塔顶,那百年之前的遗韵。
没错,我爱北大,我爱这个校园。
然而,从当我们穿上学位服的那一刻起,这个校园,就再也不属于我。它只属于往事,
属于我的回忆。
没错,这,是我在北大的最后一日。此时,此景,此生,此世,将刻骨难忘。
再也没有了图书馆自习的各种纷纭,再也没有了运动场上的挥汗如雨,有的,只是心中
永远的不舍,与牵挂。
夜,已深。人,却不愿离去。天边有一颗流星划过,是那般静,宁谧。
忍不住不回头,我的眼边,有泪光,划过。
这时候,突然有一位路人甲从你身旁出现,问你:从 XX 到 XX 怎么走?
索性,就让我再爱你一次。因为,北大永远在你心中。北大的地图,永远在你的心中。
轻手挥扬,不带走一分云彩。
【输入】
输入分为三个部分。
第一个部分有 P+1 行,第一行为一个整数 P,之后的 P 行表示北大的地点。地点长度
不超过 20 个字符。
第二个部分有 Q+1 行,第一行为一个整数 Q,之后的 Q 行每行分别为两个字符串与一
个整数,表示这两点有直线的道路,并显示二者之间的矩离(单位为米)。
第三个部分有 R+1 行,第一行为一个整数 R,之后的 R 行每行为两个字符串,表示需
要求的路线。
P<=30, Q<=50, R<=20
【输出】
输出有 R 行,分别表示每个路线最短的走法。其中两个点之间,用->(矩离)->相隔。
【样例输入】35
【样例输出】
#5
【描述】
Michael 喜欢滑雪百这并不奇怪, 因为滑雪的确很刺激。可是为了获得速度,滑的区域
必须向下倾斜,而且当你滑到坡底,你不得不再次走上坡或者等待升降机来载你。Michael
想知道载一个区域中最长的滑坡。区域由一个二维数组给出。数组的每个数字代表点的高度。
下面是一个例子
一个人可以从某个点滑向上下左右相邻四个点之一,当且仅当高度减小。在上面的例子
中,一条可滑行的滑坡为 24-17-16-1。当然 25-24-23-...-3-2-1 更长。事实上,这是最长的一
条。
【输入】
输入的第一行表示区域的行数 R 和列数 C(1 <= R,C <= 100)。下面是 R 行,每行有 C
个整数,代表高度 h,0<=h<=10000。
【输出】
输出最长区域的长度。
6
XueYiShiTang
CanYinZhongXin
XueWuShiTang
XueYiXiaoBaiFang
BaiNianJiangTang
GongHangQuKuanJi
6
XueYiShiTang CanYinZhongXin 80
XueWuShiTang CanYinZhongXin 40
XueYiShiTang XueYiXiaoBaiFang 35
XueYiXiaoBaiFang XueWuShiTang 85
CanYinZhongXin GongHangQuKuanJi 60
GongHangQuKuanJi BaiNianJiangTang 35
2
XueYiXiaoBaiFang BaiNianJiangTang
GongHangQuKuanJi GongHangQuKuanJi
XueYiXiaoBaiFang->(35)->XueYiShiTang->(80)->CanYinZhongXin->(60)->GongHan
gQuKuanJi->(35)->BaiNianJiangTang

GongHangQuKuanJi





我的代码如下


#include<iostream>
#include<iomanip>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;


int dis[35][35],n,m;
int length[95][95],value;
string names[45],name1,name2,begin,final;
char mark[105][105];
int num;
void input1(){
cin >> m;
for(int j=1;j<=m;j++){
cin >> names[j];
length[j][j]=0;
}

}
int toNumber(string name){
for(int k=1;k<=m;k++){
if(names[k]==name)
return k;
}
}


void floyd(){
for(int k=1;k<=m;k++){
for(int i=1;i<=m;i++){
for(int j=1;j<=m;j++){
if(length[i][k]+length[j][k]<length[i][j])
length[i][j]=length[i][k]+length[j][k];
}
}
}
}


void input2(){


cin >> num ;
for(int j=1;j<=num;j++)
{
cin >> name1 >> name2 >> value;
length[toNumber(name1)][toNumber(name2)]=value;
length[toNumber(name2)][toNumber(name1)]=value;
mark[toNumber(name1)][toNumber(name2)]=1;
mark[toNumber(name2)][toNumber(name1)]=1;
}
}
void output(int a,int b){
for(int i=1;i<=num;i++)
{
 if(i!=b){
if((length[a][b]==length[a][i]+length[i][b])&&mark[a][i]==1)
{
cout<< names[a]<<"->" << "(" <<length[a][i] << ")" <<"->";
output(i,b);
}
    }
  else{
  cout<<names[b]<<endl;
 }
}
}
void input(){
int n1;
cin >> n1;
for(int j=1;j<=n1;j++){
cin >> begin >>final ;
output(toNumber(begin),toNumber(final));
}
}


int main()
{
for(int i=0;i<=94;i++)
for(int j=0;j<=94;j++)
length[i][j]=300000;
memset(mark,0,sizeof(mark));
input1();
input2();
floyd();
input();

}


为什么输出不对


扫描二维码关注公众号,回复: 2179058 查看本文章



献上一颗赤诚真挚无瑕的感谢之心

猜你喜欢

转载自blog.csdn.net/qq_42701073/article/details/81061516
今日推荐