範例程式碼 uva821

//uva821
#include <iostream>
#include <cstdio>
 
using namespace std;
 
const unsigned int MAX = 101;
unsigned int arr[MAX][MAX];
void reset(){
    for(int i = 0; i < MAX; i++)
        for(int j = 0; j < MAX; j++)
            arr[i][j] = 101;
}
 
bool set(){    
    int a, b;
    cin >> a >> b;
    if(a == 0 && b == 0)
        return false;
    reset();
    arr[a][b] = 1;
    while(true){
        cin >> a >> b;
        if(a == 0 && b == 0)
            break;
        arr[a][b] = 1;
    }
    return true; 
}
double count(){
    int sum = 0, path = 0;
    for(int i = 1; i < MAX; i++){
        for(int j = 1; j < MAX; j++){
            if(arr[i][j] <= 100 && i != j){
                sum += arr[i][j];
                path++;
            }
        }   
    }
    return (double)sum / path;
}
 
int main(){
    for(int I = 1; set(); I++){
        for(int k = 0; k < MAX; k++){
            for(int i = 0; i < MAX; i++){
                for(int j = 0; j < MAX; j++){
                    if(arr[i][j] > arr[i][k] + arr[k][j])
                        arr[i][j] = arr[i][k] + arr[k][j];
                }        
            }           
        }
        printf("Case %d: average length between pages = %.3f clicks\n", I, count());
    }
    return 0;
}