返回信息流代码测试好多遍觉得没问题,为啥WA呢?求指点!
#include<stdio.h>
#include<string.h>
#define MaxSize 51
int path[ MaxSize ][ MaxSize ];
int findKernelByFloyd( int N )
{
for( int i = 1; i <= N ; i++ )
{
for( int j = 1; j <= N; j++ )
{
if( i == j )
{
path[ i ][ j ] = 0;
}
else
{
for( int k = 1; k <= N; k++ )
{
if( path[ i ][ j ] > path[ i ][ k ] + path[ k ][ j ] )
{
path[ i ][ j ] = path[ i ][ k ] + path[ k ][ j ];
}
}
}
}
}
int kernelNode = 1;
int tmpDisCount = 0;
int minDisNum = N * N;
for( int i = 1; i <= N ; i++ )
{
for( int j = 1; j <= N; j++ )
{
tmpDisCount += path[ i ][ j ];
}
if( tmpDisCount < minDisNum )
{
minDisNum = tmpDisCount;
kernelNode = i;
}
tmpDisCount = 0;
}
return kernelNode;
}
int main()
{
int T;
scanf( "%d", &T );
while( T-- )
{
int N, M;
fflush( stdin );
scanf( "%d %d", &N, &M );
for( int i = 1; i <= N ; i++ )
{
for( int j = 1; j <= N; j++ )
{
path[ i ][ j ] = N;
}
}
while( M-- )
{
int u, v;
scanf( "%d %d", &u, &v );
path[ u ][ v ] = 1;
path[ v ][ u ] = 1;
}
printf( "%d\n", findKernelByFloyd( N ) );
}
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / acm-icpc / #88943同步于 2016/3/1
该镜像源已超过 30 天没有更新,可能在源站已被删除。
ACM_ICPC机器人发帖
[求助] bupt oj 272.网络的核 WA
yyss1230
2016/3/1镜像同步8 回复
订阅后,新回复会通过你的通知中心匿名送达。
8 条回复
又是楼主。。。是不是在准备考研复试啊,真是辛苦了。
我看我的代码好像是用floyd做的,感觉代码不太长啊,你参考一下。
/*
USER_ID: test#yingzinanfei
PROBLEM: 272
SUBMISSION_TIME: 2015-03-26 10:38:04
*/
#include<stdio.h>
int matrix [51][51];
int dis[51];
int main(){
int t;
while(scanf("%d", &t) != EOF){
for(int a = 1; a <= t; a++){
int n, m;
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
matrix[i][j] = n;
}
matrix[i][i] = 0;
}
for(int i = 1; i <= m; i++){
int u, v;
scanf("%d%d", &u, &v);
matrix[u][v] = matrix[v][u] = 1;
}
for(int k = 1; k <= n; k++){
for(int i = 1; i <= n; i ++){
for(int j = 1; j <= n; j++){
if(matrix[i][k] == n || matrix[k][j] == n) continue;
if(matrix[i][j] == n || matrix[i][j] > matrix[i][k] + matrix[k][j]){
matrix[i][j] = matrix[i][k] + matrix[k][j];
}
}
}
}
for(int i = 1; i <= n; i++){
dis[i] = 0;
}
for(int i = 1; i <= n; i++){
for(int j = 1; j <= n; j++){
dis[i] += matrix[i][j];
}
}
int distance = n * n;
int idx = 0;
for(int i = 1; i <= n; i++){
if(dis[i] < distance){
idx = i;
distance = dis[i];
}
}
printf("%d\n", idx);
}
}
return 0;
}
【 在 yyss1230 的大作中提到: 】
: 代码测试好多遍觉得没问题,为啥WA呢?求指点!
: #include<stdio.h>
: #include<string.h>
: ...................
拜读啦 非常感谢你的分享!
逻辑是一致的,就是没查出我写的哪里有问题。。
是在准备复试,其实写代码倒还好,就是OJ上找不出问题很纠结啊
【 在 chenxiansf 的大作中提到: 】
: 又是楼主。。。是不是在准备考研复试啊,真是辛苦了。
: 我看我的代码好像是用floyd做的,感觉代码不太长啊,你参考一下。
: [code=c]
: ...................
不要着急,慢慢查。你这水平机试已经妥妥地没问题了
【 在 yyss1230 的大作中提到: 】
: 拜读啦 非常感谢你的分享!
: 逻辑是一致的,就是没查出我写的哪里有问题。。
: 是在准备复试,其实写代码倒还好,就是OJ上找不出问题很纠结啊
没错。。拜谢!
【 在 jasonkent 的大作中提到: 】
: floyd算法的k是要在最外层的,不然i,j的路径早早确定,下次遇到更短路没办法更新导致出错