am facut problema ,am citit pe o matrice de tip char apoi am am trecut toate datele pe o matrice normala,pe datele de pe problema
imi da 4 2 3 4;dar cand am trimis problema am luat 0 puncte

,de ce? te poti uita putin peste programul meu ? multumesc anticipat !

#include <fstream>
#include <iomanip>
using namespace std;
ifstream x("insule.in");
ofstream y("insule.out");
struct lee
{
int lin,col;
};
int dl[]={-1,0,1,0};//deplasarea pe linie
int dc[]={0,1,0,-1};//deplasarea pe coloana
char a[101][101];/*arhipelagul cu insule,este de tip char
pt ca datele din matrice pe linie nu sunt separate prin spatiu*/
int i,j,m,n,prim,ultim,k,b[101][101],insule[4],limita;/*am facut
o copiiea arhipelaguluide tip int pentru ca pe char
nu pot prelucra datele,iar limitele le voi folosi in mai jos
in conditia de continuitate a algoritmului lui lee */
int pod,pod_min; // un pod si podul de lungime minima
lee c[10000],v,p,start; //coada,vecinul,pozitia curenta si startul
void citesc()
{
x>>n>>m;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
x>>a
[j];
b[j]=a[j]-48;
}
}
void scriu()
{
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
y<<setw(4)<<b[j];
y<<'\n';
}
y<<"\n\n\n";
}
void lee()
{
prim=ultim=0;
c[0]=start;
while(prim<=ultim)
{
p=c[prim];
prim++;
for(k=0;k<4;k++)
{
v.lin=p.lin+dl[k];
v.col=p.col+dc[k];
//if(b[v.lin][v.col]!=0 && b[v.lin][v.col]<100 )
if(b[v.lin][v.col]==limita )
{
b[v.lin][v.col]=b[v.lin][v.col]+100;
ultim++;
c[ultim]=v;
}
}
}
}
void p1()
{
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
{
if(b[j]!=0 && b[j]<100)
{
insule[b[j]]++;
start.lin=i;
start.col=j;
limita=b[j];
//y<<limita<<' ';
b[j]=b[j]+100;
lee();
}
}
}
void lee2()/*am modificat potin lee-ul astfel incat de la start sa
sa ia directiile pe rand si la fiecare directie sa mearga in liniie
dreapnta pana cand gaseste sau nu gaseste ceva pt a fi numit pod;
daca incepe din 1 apoi parcrurgem numai zero-uri pana la un 2,il
consideram pod,daca il consideram pod ne interesam daca este de
lungime minima...
*/
{
prim=ultim=0;
c[0]=start;
for(k=0;k<4;k++)
{
v.lin=start.lin+dl[k];
v.col=start.col+dc[k];
while(a[v.lin][v.col]==0)
{
pod++;
v.lin+=dl[k];
v.col+=dc[k];
}
if(a[v.lin][v.col]==2 && pod<pod_min)
pod_min=pod;
pod=0;
}
}
void p2()
{
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(a[j]==1)
{
start.lin=i;
start.col=j;
lee2();
}
}
y<<pod_min;
}
int main()
{
citesc();
//scriu();
p1();
//scriu();
for(i=1;i<=3;i++) y<<insule<<" ";
if(m<n) pod_min=m-2;//vad care ar putea fi lungimea maxima a unui pod
else pod_min=n-2;
p2();
return 0;
}