Professional Documents
Culture Documents
NetApp Problem
NetApp Problem
Mrityunjay got an assignment from his school that he has to collect money from each house for next days event. The
city is built just like a 2-D array and each house owner kept certain amount for Mrityunjay (for ex. The house owner at
(i, j) co-ordinate kept A[i,j] for Mrityunjay).
Mrityunjay is in a hurry and he wants to reach home as soon as possible otherwise he will miss the match between
India and Bangladesh. Also he can only move to any adjacent house from his location, and he cannot move
diagonally. So please find a way so that he will collect maximum amount from everyone if he will reach home earliest.
Input Specification
input1: first input will tell you the size of array
input2: string as shown in the example and you have to parse it to build your 2-D array.
Output Specification
output1: you need to set maximum amount collected to this global variable (type int)
Example:
Consider input1 = 4 and it means school is at (0, 0) and his house at (4,4).
In between the houses are like
input2 = "(1,7,5,2),(5,12,3,6),(100,9,23,16),(16,4,5,9)"
To collect maximum amount Mrityunjay should take this path {1,5,100,9,23,16,9}
so total amount collected, output1 = 1+5+100+9+23+16+9 = 163
printf("\ninput1=");
scanf("%d",&r_end);
printf("\ninput2=");
while(r<r_end) {
c=0;
while(c<r_end) {
scanf("%d",&a[r][c]);
c++;
}
r++;
}
r=0;
while(r<r_end) {
c=0;
while(c<r_end) {
b[r][c]=a[r][c];
c++;
}
r++;
time=0;
while(time<3) {
r=rtwo=0;
c=ctwo=0;
sum=0;
do {
f_max(a,&rtwo,&ctwo,r_end);
rone=0;
cone=0;
i=0;
j=0;
cntd=0;
rmax=rtwo;
cmax=ctwo;
sum1=0;
sum2=0;
if(cone<ctwo) {
c=cone;
r=rone;
i=cntd;
while(c<=ctwo) {
s1[i]=b[r][c];
i++;
sum1=sum1+b[r][c];
c++;
}
if (c>ctwo) c--;
r++;
while(r<=rtwo) {
s1[i]=b[r][c];
i++;
sum1=sum1+b[r][c];
r++;
}
if(r>rtwo) r--;
if(sum<sum1) { sum=sum1; }
c=cone;
r=rone;
j=cntd;
while(r<=rtwo) {
s2[j]=b[r][c];
j++;
sum2=sum2+b[r][c];
r++;
}
if(r>rtwo) r--;
c++;
while(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
}
c--;
if(sum2>sum) {
sum=sum2;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
c=cone;
r=rone;
sum2=0;
diff=ctwo-cone+rtwo-rone;
d=0;
j=cntd;
while(d<=diff) {
if(r>rtwo) { r--; c++; }
if(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
d++;
if(d>=diff) break;
}
if(sum2>sum) {
sum=sum2;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
c=cone;
r=rone;
sum2=0;
d=0;
j=cntd;
while(d<diff) {
if(c>ctwo) {c--;r++; }
if(r<=rtwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
r++;
d++;
if(d>=diff) break;
}
if(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
d++;
}
}
if(sum2>sum) {
sum=sum2;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
}
if(cone==ctwo) {
r=rone;
c=cone;
i=j=cntd;
while(r<=rtwo) {
s1[i]=b[r][c];
s2[j]=b[r][c];
sum1=sum1+b[r][c];
sum2=sum2+b[r][c];
r++;
i++;
j++;
}
r--;
sum=sum1;
}
}while((rtwo<rmax)||(ctwo<cmax));
val=a[rtwo][ctwo];
a[rtwo][ctwo]=0;
rone=rtwo;
cone=ctwo;
while(rtwo<(r_end-1)||ctwo<(r_end-1)) {
sum1=sum2=0;
f_max(a,&rtwo,&ctwo,r_end);
a[rone][cone]=val;
cntd=i;
if(cone<ctwo) {
c=cone;
r=rone;
i=cntd;
c++;
while(c<=ctwo) {
s1[i]=b[r][c];
i++;
sum1=sum1+b[r][c];
c++;
}
if(c>ctwo) c--;
int k=0;
r++;
while(r<=rtwo) {
sum1=sum1+b[r][c];
s1[i]=b[r][c];
i++;
r++;
}
if(r>rtwo) r--;
c=cone;
r=rone;
j=cntd;
r++;
while(r<=rtwo) {
s2[j]=b[r][c];
j++;
sum2=sum2+b[r][c];
r++;
}
if (r>rtwo) r--;
c++;
while(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
}
if(c>ctwo) c--;
if(sum2>sum1) {
sum1=sum2;
sum=sum+sum1;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
}
else
sum=sum+sum1;
c=cone;
r=rone;
sum2=0;
diff=ctwo-cone+rtwo-rone;
d=0;
j=cntd;
while(d<diff) {
if(r>rtwo) r--;
if (d==0) c++;
if(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
d++;
if(d>=diff) break;
if(c>ctwo) c--;
if(d==0) r++;
if(r<=rtwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
r++;
d++;
}
}
if(sum2>sum1) {
sum=sum+sum2-sum1;
sum1=sum2;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
}
c=cone;
r=rone;
sum2=0;
diff=ctwo-cone+rtwo-rone;
d=0;
j=cntd;
while(d<diff) {
if(c>ctwo) c--;
if (d==0) r++;
if(r<=rtwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
r++;
d++;
}
if(d>=diff) break;
if(r>rtwo) r--;
if (d==0) c++;
if(c<=ctwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
c++;
d++;
}
}
if(sum2>sum1) {
sum=sum+sum2-sum1;
sum1=sum2;
i=cntd;
while(i<j) {
s1[i]=s2[i];
i++;
}
}
if(cone==ctwo) {
i=j=cntd;
r=rone;
c=cone;
r++;
sum1=sum2=0;
while(r<=rtwo) {
s1[i]=b[r][c];
s2[j]=b[r][c];
sum2=sum2+b[r][c];
sum1=sum1+b[r][c];
i++;
j++;
r++;
}
if(r>rtwo) r--;
sum=sum+sum1;
}
a[rone][cone]=0;
val=a[rtwo][ctwo];
a[rtwo][ctwo]=0;
rone=rtwo;
cone=ctwo;
time++;
r=c=0;
while(r<r_end) {
c=0;
while(c<r_end) {
if((r==rmax)&&(c==cmax))
{a[r][c]=0;}
else if(a[r][c]!=0)
{
a[r][c]=b[r][c];
}
c++;
}
r++;
}
cntd=i;
i=0;
if (sum>sumg)
{
sumg=sum;
while(i<cntd) {
s[i]=s1[i];
s1[i]=0;
i++;
}
}
}
d=0;
diff=r_end+r_end;
printf("\nOutput1=");
while(d<(diff-1)) {
printf("%d+",s[d]);
d++;
}
printf("\b=%d",sumg);
return 0;
}
c_temp=c=*ptr2;
while(r<=(r_end-1)) {
c=*ptr2;
while(c<=(r_end-1)) {
if(p[r_temp][c_temp]<=p[r][c]) {
r_temp=r;
c_temp=c;
}
c++;
}
r++;
*ptr1=r_temp;
*ptr2=c_temp;