Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 24

Problem Statement :

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

Solution code submitted by me:


#include<stdio.h>
void f_max(int p[][100],int *,int *,int);
int main() {
int
a[100][100],b[100][100],s1[50],s2[50],r=0,rtwo,c,ctwo,r_end,rone,cone,i,j,cntd,r
max,cmax,sum1=0,sum2=0,sum,diff,d,val,time,s[50],sumg=0;

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(c>ctwo) {c--; r++; }


if(r<=rtwo) {
sum2=sum2+b[r][c];
s2[j]=b[r][c];
j++;
r++;
d++;
}

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(r>rtwo) {r--; c++; }

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;
}

void f_max(int p[][100],int *ptr1,int *ptr2,int r_end) {


int r_temp,r,c,c_temp;
r_temp=r=*ptr1;

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;

You might also like