Cod sursa(job #295270)

Utilizator tibiletsKoos Tiberiu Iosif tibilets Data 3 aprilie 2009 09:43:48
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 5.74 kb
#include<graphics.h>
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
int v[12][12],w[12][12],z[12][12],x,y,gasit,gasit1,gasit2,i,j,k;
char a;
void copiere()
     {int i,j;
     for(i=1;i<=10;i++)
	 for(j=1;j<=10;j++)
	    z[i][j]=v[i][j];
     }
void bordare()
	{int i;
	 for(i=0;i<=11;i++)
		{v[0][i]=1;w[0][i]=1;}
	 for(i=0;i<=11;i++)
		{v[i][0]=1;w[i][0]=1;}
	 for(i=0;i<=11;i++)
		{v[11][i]=1;w[11][i]=1;}
	 for(i=0;i<=11;i++)
		{v[i][11]=1;w[i][11]=1;}
	}
void completare(int t)
	{int a=0,b=0,gasit=0,x;
	 if(t<=5)
		{while(v[a][b])
			 {a=random(10)+1;b=random(10)+1;}
		 v[a][b]=1;
		 while(!gasit)
			 {x=random(4);
		 if(x==0)
				{if(!v[a-1][b])
			 {v[a-1][b]=1;gasit=1;}
				}
		 else
			  if(x==1)
			{if(!v[a][b+1])
				 {v[a][b+1]=1;gasit=1;}
			}
			  else
			 if(x==2)
				  {if(!v[a+1][b])
				 {v[a+1][b]=1;gasit=1;}
				  }
			 else
				  if(!v[a][b-1])
				{v[a][b-1]=1;gasit=1;}
			 }
		t++;
		completare(t);
		}
	}
int introd(int a,int b)
		{  char t;
	 cin>>t;
	 if(t=='l'||t=='L') {w[a][b]=1;return 1;}
	 if(t=='m'||t=='M') {w[a][b]=1;return 2;}
	 w[a][b]=2;
	 return 0;
		}
int intr()
	 {char a[3],b[3];  x=0;y=0;
	cout<<'\n'<<"x=";cin>>a;
	cout<<"y=";cin>>b;
	if(strlen(a)==2&&a[0]=='1'&&a[1]=='0')  x=10;
	if(strlen(b)==2&&b[0]=='1'&&b[1]=='0')  y=10;
	if(strlen(a)==1&&a[0]>='1'&&a[0]<='9') x=a[0]-'0';
	if(strlen(b)==1&&b[0]>='1'&&b[0]<='9') y=b[0]-'0';
	k=0;
	while(x<1||x>10||y<1||y>10)
	{
		cout<<"Coordonate gresite!\nMai incearca o data..."<<'\n';
		char a[3],b[3]; x=0;y=0;
		cout<<'\n'<<"x=";cin>>a;
		cout<<"y=";cin>>b;
		if(strlen(a)==2&&a[0]=='1'&&a[1]=='0')  x=10;
		if(strlen(b)==2&&b[0]=='1'&&b[1]=='0')  y=10;
		if(strlen(a)==1&&a[0]>='1'&&a[0]<='9') x=a[0]-'0';
		if(strlen(b)==1&&b[0]>='1'&&b[0]<='9') y=b[0]-'0';
     
	}
	if(v[x][y]==1)
	    {v[x][y]=2;
	     for(i=1;i<=10;i++)
	      for(j=1;j<=10;j++)
	       if(v[i][j]==1)
		 k++;
	     if(k==0)
		{cout<<"lovit mortal"<<'\n';return 1;}
	     else
		cout<<"lovit"<<'\n';

	     }
	else
	    cout<<"ratat"<<'\n';
	return 0;
    }
void coord(int a,int b)
     {cout<<'('<<a<<','<<b<<')'<<" - lovit sau ratat?"<<'\n';}
int verificare(int a,int b)
{       int k=0,i,j;char t;
	for(i=1;i<=10;i++)
		for(j=1;j<=10;j++)
			if(w[i][j]==1) k++;
	if(k==10) return 1;
	cout<<"Jocul nu s-a terminat inca. Vrei sa renunti? \n(Daca da apasa tasta 'd', daca nu apasa tasta 'n')";
	cin>>t;
	if(t!='d'&&t!='D'&&t!='n'&&t!='N') {cout<<"Tasteaza cu atentie! Daca renunti apasa tasta 'd', daca nu apasa tasta 'n'";cin>>t;}
	if(t=='d'||t=='D') return 1;
	cout<<"Ok! Precizeaza, te rog, inca o data daca ("<<a<<','<<b<<") este lovit sau ratat";
	cin>>t;
	if(t!='l'&&t!='L'&&t!='r'&&t!='R')  {cout<<" Repeta precizarea cu atentie (lovire - 'l', ratare - 'r')"<<'\n';cin>>t;}
	if(t=='r'||t=='R') w[a][b]=2;
	return 0;
}
int verif()
{	int i,j,k=0;
	for(i=1;i<=10;i++)
		for(j=1;j<=10;j++)
			if(w[i][j]==1) k++;
	if(k==10) return 1;
	return 0;
}
int proced(int a,int b)
{       int g,v;
	g=intr();if(g) return 1;
	coord(a,b);g=introd(a,b);
	if(g==1) {if(verif()) return 2; else return 0;}
	if(g==2) {v=verificare(a,b);if(v) return 2;}
	return 3;
}
int lovire(int a,int b)
{	int x,v;
	gasit=0;
	while(!gasit)
	{x=random(4);
	if(x==0) if(!w[a-1][b]) {v=proced(a-1,b);if(v!=3) return v;}
	if(x==1) if(!w[a][b+1]) {v=proced(a,b+1);if(v!=3) return v;}
	if(x==2) if(!w[a+1][b]) {v=proced(a+1,b);if(v!=3) return v;}
        if(x==3) if(!w[a][b-1]) {v=proced(a,b-1);if(v!=3) return v;}
	}
}
void main()
{int t;
randomize();
clrscr();
cout<<"Pentru 'lovire' foloseste simbolul 'l' sau 'L';"<<'\n'<<"Pentru 'ratare' foloseste simbolul 'r' sau 'R'"<<'\n'<<"Pentru 'lovire mortala' foloseste simbolul 'm' sau 'M'";
cout<<"\n\nCompletarea careului cu cele cinci avioane se face prin marcarea a doua \n'patratele' alaturate (pe orizontala sau pe verticala) pentru fiecare avion."<<'\n'<<'\n';
cout<<"\n\n                     MULT SUCCES!!!\n\n";
bordare();
completare(1);
copiere();
while(!gasit1&&!gasit2)
	 {if(intr()) gasit1=1;
	  x=random(10)+1;
	  y=random(10)+1;
	  while(w[x][y])
	{x=random(10)+1;
	 y=random(10)+1;
	}
	  cout<<'\n'<<'('<<x<<','<<y<<')'<<" - lovit sau ratat?"<<'\n';
	  cin>>a;
	  if(a=='l'||a=='L')
	{w[x][y]=1;t=lovire(x,y);
	 if(t==1) gasit1=1;
	 if(t==2) gasit2=2;
	}
	  else
	if(a=='m'||a=='M')
		{w[x][y]=1;t=verificare(x,y);if(t) gasit2=1;}
	 else
		 w[x][y]=2;
	  }
if(gasit1)
	cout<<'\n'<<'\n'<<"             AI CASTIGAT"<<'\n';
else
	cout<<'\n'<<'\n'<<"             AI PIERDUT"<<'\n';
int d=20;
clrscr();
x=30;
y+=10;
int gd=DETECT,gm;
initgraph(&gd,&gm,"d:\\borlandc\\bgi");
outtextxy(1,0,"Amplasarea initiala a avioanelor mele!");
setcolor(YELLOW);
for(i=0;i<=10;i++)
 {line(x+i*d,y,x+i*d,y+10*d);
  line(x,y+i*d,x+10*d,y+i*d);
 }
setcolor(BLUE);
for(i=1;i<=10;i++)
 for(j=1;j<=10;j++)
  if(z[i][j]==1)
	floodfill(x+j*d-1,y+i*d-1,YELLOW);
setcolor(WHITE);
getch();
outtextxy(1,240,"Configuratia finala a careului tau!");
setcolor(YELLOW);
y+=240;
for(i=0;i<=10;i++)
 {line(x+i*d,y,x+i*d,y+10*d);
  line(x,y+i*d,x+10*d,y+i*d);
 }
setcolor(BLUE);
for(i=1;i<=10;i++)
 for(j=1;j<=10;j++)
  if(w[i][j]==1)
   floodfill(x+j*d-1,y+i*d-1,YELLOW);
setcolor(RED);
settextstyle(1, HORIZ_DIR, 2);
for(i=1;i<=10;i++)
 for(j=1;j<=10;j++)
  if(w[i][j]==2)
	outtextxy(x+j*d-16,y+i*d-23,"X");

/*for(int i=1;i<=10;i++)
   {for(int j=1;j<=10;j++)
	cout<<v[i][j]<<' ';
   cout<<'\n';
   }
   cout<<'\n';
for(i=1;i<=10;i++)
   {for(j=1;j<=10;j++)
	cout<<w[i][j]<<' ';
   cout<<'\n';
   }*/
getch();
cleardevice();
clrscr();
settextstyle(1, HORIZ_DIR, 2);
outtextxy(80,230,"Mi-a facut placere sa joc cu tine! La revedere!");
getch();
}