I have an maze represented as a square array of integers. I have to find the least-cost path (sum of integers) through the maze, moving orthogonally.
12323
12323
11232
21111
For instance, the track through the maze above will be all the 1's:
X2323
X2323
XX232
2XXXX
I wrote a recursive function to find the path, but it always return 0 instead of the number of steps.
I set breakpoint and find out that the line below always executes (comparison is true) even when the array location matches num.
if(*((int*)table)!=num)
return 0;
I think I have some problems with the int**
code:
case 3:// from the main. arrTask3 is initialized By get2Darray.
printf("enter the size of the array\n");
scanf("%d",&arrTask3Size);
arrTask3Size=getarrsize(arrTask3Size);
Get2Darr((int**)arrTask3, arrTask3Size, 0, 0);
num=*((int*)arrTask3);
start=(int**)arrTask3;
finish=(int**)(arrTask3)+arrTask3Size*arrTask3Size;
Task3He(num, arrTask3Size, arrTask3, finish, start, 0, 's');
void Get2Darr(int** arr2D,int size,int row, int col){
int num;
if(row<size){
if(col<size){
printf("enter the element at cell [%d][%d]\n",row,col);
scanf("%d",&num);
*((int*)arr2D+row*size+col)=num;
Get2Darr(arr2D, size, row, col+1);
}
else
Get2Darr(arr2D, size, row+1, 0);
}
}
int Task3He(int num,int N ,int **table,int **Finish,int **Start,int count,char prvstep){
int tempup,tempdo,templ,tempr;
if((int)(table-Finish)==0&&num==*((int*)table))
return count;
if((int)(table-Finish)==0)
return 0;
if((int)table<(int)Start||(int)table>(int)Finish)
return 0;
if(*((int*)table)!=num)
return 0;
if(prvstep=='u'){
tempup=Task3He(num,N, (int**)table-N, Finish, Start, count+1,'u');
if (tempup!=0) return 1;
templ=Task3He(num,N, (int**)table-1, Finish, Start, count+1,'l');
if (templ!=0) return 1;
tempr=Task3He(num,N, (int**)table+1, Finish, Start, count+1,'r');
if (tempr!=0) return 1;
}
if(prvstep=='d'){
tempdo=Task3He(num,N, (int**)table+N, Finish, Start, count+1,'d');
if (tempdo!=0) return 1;
templ=Task3He(num,N, (int**)table-1, Finish, Start, count+1,'l');
if (templ!=0) return 1;
tempr=Task3He(num,N, (int**)table+1, Finish, Start, count+1,'r');
if (tempr!=0) return 1;
}
if(prvstep=='l'){
tempup=Task3He(num,N, (int**)table-N, Finish, Start, count+1,'u');
if (tempup!=0) return 1;
tempdo=Task3He(num,N, (int**)table+N, Finish, Start, count+1,'d');
if (tempdo!=0) return 1;
templ=Task3He(num,N, (int**)table-1, Finish, Start, count+1,'l');
if (templ!=0) return 1;
}
if(prvstep=='r'){
tempup=Task3He(num,N, (int**)table-N, Finish, Start, count+1,'u');
if (tempup!=0) return 1;
tempdo=Task3He(num,N, (int**)table+N, Finish, Start, count+1,'d');
if (tempdo!=0) return 1;
tempr=Task3He(num,N, (int**)table+1, Finish, Start, count+1,'r');
if (tempr!=0) return 1;
}
if(prvstep=='s'){
tempup=Task3He(num,N, (int**)table-N, Finish, Start, count+1,'u');
if (tempup!=0) return 1;
tempdo=Task3He(num,N, (int**)table+N, Finish, Start, count+1,'d');
if (tempdo!=0) return 1;
templ=Task3He(num,N, (int**)table-1, Finish, Start, count+1,'l');
if (templ!=0) return 1;
tempr=Task3He(num,N, (int**)table+1, Finish, Start, count+1,'r');
if (tempr!=0) return 1;
}
return 0;
}