Cod sursa(job #755532)

Utilizator Cezar13Cezar Manea Cezar13 Data 6 iunie 2012 09:34:54
Problema Infasuratoare convexa Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.64 kb
#include <fstream>
using namespace std;

ifstream fin("infasuratoare.in");
ofstream fout("infasuratoare.out");

struct NODD {double x,y; struct NODD*urm,*pre;};
typedef NODD *ListaD;

ListaD A;
double xs,ys;
void parcurgereis(ListaD prim);
void parcurgeresi(ListaD ult);
void inserare (ListaD &prim, double x,double y, ListaD p);
void sterge (ListaD &prim, ListaD p);
void crearec(ListaD &prim);

int main()
{
    crearec(A);
    return 0;
}

void crearec(ListaD &prim)
{
  prim=NULL; ListaD ultimul;
  double x,y;
  int n;
  fin>>n; if (!n) return;
  fin>>x>>y;
  if (x<xs || (x==xs && y<ys)) 
	xs=x; ys=y;
  inserare(prim,x,y,NULL);
  ultimul=prim;
  for (int i=1;i<n;i++)
    {
      fin>>x>>y;
      inserare(prim,x,y,ultimul);
      ultimul=ultimul->urm;
    }
}
void parcurgereis (ListaD prim)
{
    ListaD p;
    for (p=prim; p; p=p->urm);
       // fout<<p->inf<<" ";
}

void parcurgeresi (ListaD ult)
{
    ListaD p;
    for (p=ult; p; p=p->pre);
        //fout<<p->inf<<" ";
}

void inserare (ListaD &prim, double x, double y, ListaD p)
//p indica adresa nodului dupa care se face inserarea
{
    ListaD q=new NODD;
    q->x=x;
	q->y=y;
    if (!p) //inserez la inceput
        {
            q->urm=prim;
            q->pre=NULL;
            prim=q;
        }
    else //inserez dupa nodul indicat de p
        {
            q->urm=p->urm;
            q->pre=p;
            if (p->urm) q->urm->pre=q;
            p->urm=q;
        }
}

void sterge (ListaD &prim, ListaD p)
{
   ListaD pp=p->pre, pu=p->urm;
   if (pp) pp->urm=pu;
   else prim=pu;
   if (pu) pu->pre=pp;
   delete p;
}