24h購物| | PChome| 登入
2009-06-28 19:06:15| 人氣1,500| 回應1 | 上一篇 | 下一篇

2006 NPSC E. 漢米頓的麻煩

推薦 0 收藏 0 轉貼0 訂閱站台

作法:Floyd-Warshall 演算法

/**************************************************/

#include<stdio.h>
#include<stdlib.h>
main()
{
 int n;
 while(scanf("%d",&n)==1&&n!=0)
   {
     int map[100][100]={0};
     int a,b,c;
     for(a=0;a<n;a++)
      for(b=0;b<n;b++)
       {
         scanf("%d",&map[a][b]);
         if(map[a][b]==0) map[a][b]=1000000;
       }
      for(a=0;a<n;a++)
       for(b=0;b<n;b++)
        for(c=0;c<n;c++)
         if(map[b][a]+map[a][c]<map[b][c])
          map[b][c]=map[b][a]+map[a][c];
       int min=1000000;
       for(a=0;a<n;a++)
        if(min>map[a][a]) min=map[a][a];
      if(min!=1000000) printf("%d\n",min);
      else printf("-1\n");
   }
 return 0;
}

/*****************************************************/

優化輸入

#include<stdio.h>
#include<stdlib.h>
int input()  
{  
  char cha;  
  int x=0;  
  while(cha=getchar())  
     if(cha!=' '&&cha!='\n') break;  
  x=cha-48;  
  while(cha=getchar())   
    {  
     if(cha==' '||cha=='\n') break;  
      x=x*10+cha-48;  
    }  
    return x;  
}
main()
{
 int n;
 while(scanf("%d",&n)==1&&n!=0)
   {
     int map[100][100]={0};
     int a,b,c;
     for(a=0;a<n;a++)
      for(b=0;b<n;b++)
       {
         map[a][b]=input();
         if(map[a][b]==0) map[a][b]=1000000;
       }
      for(a=0;a<n;a++)
       for(b=0;b<n;b++)
        for(c=0;c<n;c++)
         if(map[b][a]+map[a][c]<map[b][c])
          map[b][c]=map[b][a]+map[a][c];
       int min=1000000;
       for(a=0;a<n;a++)
        if(min>map[a][a]) min=map[a][a];
      if(min!=1000000) printf("%d\n",min);
      else printf("-1\n");
   }
 return 0;
}

台長: 來源不明
人氣(1,500) | 回應(1)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 數位資訊(科技、網路、通訊、家電) | 個人分類: NPSC |
此分類下一篇:2008 NPSC C. 咒語
此分類上一篇:2007 NPSC H. 數字拼盤

Evan
#include<iostream>
using namespace std;

int input(){
char c;
int x,y;
while(c=getchar())==' '||c=='\n');
x = c-'0';

while((c=cin.get())>='0')
x = (x*10+c-'0');
return x;
}
//這樣的優化也可以
2013-08-24 15:58:12
是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文