#include #include using namespace std; typedef struct Punct{ int x, y, val; }; int N=200; int matsol[200][200]; Punct detDiag(Punct st, Punct dr) { Punct mij; mij.x= (st.x+dr.x)/2; mij.y = (st.y + dr.y)/2; if(matsol[mij.x][mij.y] == 0) { cout<>mij.val; } else mij.val = matsol[mij.x][mij.y]; if(st.x == dr.x && st.y == dr.y) return mij; if(((mij.x+dr.x+1)/2 == mij.x && (mij.y+dr.y+1)/2 == mij.y) || ((mij.x+st.x)/2 == mij.x && (mij.y+st.y)/2 == mij.y)) return mij; if(mij.val==0) return mij; if(mij.val<0) { mij.x++; mij.y++; return detDiag(mij, dr); } else return detDiag(st, mij); } Punct cautare(Punct st, Punct dt) { Punct x; /* if(dt.x-st.x < dt.y-st.y) { Punct dts; dts.y=st.y+ dt.x-st.x; dts.x = dt.x; x = detDiag(st, dts); } else if(dt.x-st.x > dt.y-st.y) { Punct dts; dts.x=st.x+ dt.y-st.y; dts.y = dt.y; x = detDiag(st, dts); } else */ x = detDiag(st, dt); if(x.val==0) return x; if(x.x == st.x && x.y == st.y && x.val>0) return x; if(x.x == dt.x && x.y == dt.y && x.val<0) return x; Punct st1, st2, dr1, dr2; if(x.val <0) { x.x++; x.y++; } st1.x = st.x; st1.y = x.y; dr1.x = x.x - 1; dr1.y = dt.y; st2.x = x.x; st2.y = st.y; dr2.x = dt.x; dr2.y = x.y - 1; x = cautare (st1, dr1); if(x.val==0) return x; x = cautare(st2, dr2); return x; } int main(){ Punct st, dr, x; st.x = st.y = 0; dr.x = dr.y = N-1; x=cautare(st, dr); return 0; }