1. 程式人生 > >POJ 2253 Frogger ,poj3660Cow Contest(判斷絕對順序)(最短路,floyed)

POJ 2253 Frogger ,poj3660Cow Contest(判斷絕對順序)(最短路,floyed)

技術 memset lse 關系 size using onclick second win

POJ 2253 Frogger題目意思就是求所有路徑中最大路徑中的最小值。

技術分享圖片
#include<iostream>
#include<cstdio>
#include<string.h>
#include <utility>//make_pair的頭文件 
#include<math.h>
using namespace std;
const int maxn=205;
double map[maxn][maxn];
int n;
typedef struct pair<int,int> PAIR_IF;
double max(int a,int b) { if(a>b) return a; else return b; } void floyd() { for(int v=1;v<=n;v++) for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) if(map[i][j]>max(map[i][v],map[v][j])) map[i][j]=max(map[i][v],map[v][j]); printf("Frog Distance = %.3f\n\n
",map[1][2]); } double dis(PAIR_IF p1,PAIR_IF p2) { return (sqrt((double)(p1.first-p2.first)*(p1.first-p2.first)+(p2.second-p1.second)*(p2.second-p1.second))); } int main() { std::ios::sync_with_stdio(false);//用這個語句,取消cin,cout與stdio的同步,就是提速,效率基本與scanf和printf一致。 int a,b; PAIR_IF p[maxn];
int t=1; while(cin>>n&&n!=0) { for(int i=1;i<=n;i++) { cin>>a>>b; p[i]=make_pair(a,b); } for(int i=1;i<=n;i++) { for(int j=i;j<=n;j++) { if(i==j) map[i][j]=0; map[j][i]=map[i][j]=dis(p[i],p[j]); } } cout<<"Scenario #"<<t<<endl; floyd(); t++; } return 0; }
View Code

poj3660Cow Contest(判斷絕對順序)題目意思是給出牛的數量n和牛之間的勝負關系m,讓你求出可確定排名的牛的數量

列如:輸入:

5 5(5頭牛 5關系)
4 3(牛4可打敗牛3)

4 2(牛4可打敗牛2)
3 2(牛3可打敗牛2)
1 2(牛1可打敗牛2)
2 5(牛2可打敗牛5)

輸出:2(牛1和牛5可確定排名)

代碼:

技術分享圖片
#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
using namespace std;
const int MAXN=110;
int win[MAXN][MAXN];
int main()
{
    int n,m;
    while(scanf("%d%d",&n,&m)!=EOF)
    {
        memset(win,0,sizeof(win));
        int u,v;
        while(m--)//m種關系 
        {
            scanf("%d%d",&u,&v);
            win[u][v]=1;  //u可以直接打敗v 
        }
        for(int k=1;k<=n;k++)  //i間接打敗j
            for(int i=1;i<=n;i++)
                for(int j=1;j<=n;j++)
                    if(win[i][k]&&win[k][j])
                        win[i][j]=1;
        int ans=0;//記錄有幾頭牛可以確定排名 
        int j;
        for(int i=1;i<=n;i++)
        {
            for(j=1;j<=n;j++)//與所有牛都有關系就能夠確定絕對順序 
            {
                if(i==j)
                continue;
                if(win[i][j]==0&&win[j][i]==0)
                break;//關系不確定
            }
            if(j>n)
            ans++;
        }
        printf("%d\n",ans);
    }
    return 0;
}
View Code

POJ 2253 Frogger ,poj3660Cow Contest(判斷絕對順序)(最短路,floyed)