Cod sursa(job #363178)

Utilizator APOCALYPTODragos APOCALYPTO Data 12 noiembrie 2009 07:35:03
Problema Floyd-Warshall/Roy-Floyd Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb

#include<iostream>
#include<algorithm>
#include<stack>
using namespace std;
struct data{
    int x;
    int y;
    int mark;
    int ind;
};
data pct[1000],aux;
long n;

bool compare(data i,data j)
{return ((i.x-pct[1].x)*(j.y-pct[1].y)<(i.y-pct[1].y)*(j.x-pct[1].x));
}
int main()
{stack<int> stiva;
int k,i;
long min=1;

    cin>>n;



    for(i=1;i<=n;i++)
      {cin>>pct[i].x>>pct[i].y;
      pct[i].ind=i;}

    for(i=2;i<=n;i++)
       {if(pct[i].x<pct[min].x)
       min=i;}
    cout<<min;
    aux=pct[min];
    pct[min]=pct[1];
    pct[1]=aux;
    sort(pct+2,pct+n+1,compare);
    stiva.push(pct[1].ind);
    stiva.push(pct[2].ind);
    cout<<stiva.top()<<'\n';

    stiva.push(pct[3].ind);
    cout<<stiva.top()<<'\n';
    k=3;
    for(i=4;i<=n;i++)
        {while((pct[k].x - pct[k-1].x)*(pct[i].y - pct[k-1].y)<(pct[k].y - pct[k-1].y)*(pct[i].x - pct[k-1].x))
           {k=k-1;

           }
         k=k+1;
         stiva.push(pct[i].ind);
        }
       while(!stiva.empty())
       {cout<<" "<<stiva.top();
       stiva.pop();
       }


    return 1;
}