返回信息流问题见最后的注释处,我好菜……[ema1]
oj链接:http://code.bupt.edu.cn/problem/p/272/
#include <stdio.h>
#include <iostream>
using namespace std;
int ans[53][53];
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n,m;
scanf("%d%d",&n,&m);
//初始化ans数组
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
ans[i][j]=-1;
}
ans[i][i]=0;
}
//将边的权值设为1
while(m--)
{
int a,b,c;
scanf("%d%d",&a,&b);
ans[a][b]=ans[b][a]=1;
}
//floyd算法
for(int k=1;k<=n;k++){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
{
if(ans[i][k]==-1 || ans[k][j]==-1) continue;
if(ans[i][j]==-1 || ans[i][j]>ans[i][k]+ans[k][j])
ans[i][j]=ans[i][k]+ans[k][j];
}
}
}
//将独立点到连通图上的点的权值设为节点数量N
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
if(ans[i][j]==-1)//OE?EE·?¨jI??AA?ua
{
for(int k=1;k<=n;k++) ans[k][j]=ans[j][k]=n;
}
}
}
/*
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
{
printf("%d",ans[i][j]);
}
printf("\n");
}
*/
//将ans矩阵每一行相加,取行和最小的那一行的行标输出
int hhh=0,flag=1,min,answer;
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++)
{
hhh+=ans[i][j];
if(j==n && flag==1) //第一行加的结果赋值给min
{
flag--;
min=hhh;
answer=i;
}
if(j==n && flag<=0 && hhh<min) //除第一行外,行和的结果均和min作比较,小则给min
{
min=hhh;
answer=i;
}
}
hhh=0;
}
cout<<answer<<endl;//这个地方为什么用printf("%d\n",&answer);总是出垃圾值
//顺便求点进贴的大神帮忙看看忽略了啥地方,代码在本地测试了好多用
//例都是行的,到oj就是不过……
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #90633同步于 2016/3/19
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
求问北邮14年计算机复试“网络的核”的一个问题
jaegerstar
2016/3/19镜像同步2 回复
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
擦。。低级错误。。。。
【 在 nuanyangyang 的大作中提到: 】
: - printf("%d\n",&answer);
: + printf("%d\n",answer);