Hi all,
I have written recurisve pathfinding fuction from matrix[j] to matrix[x][y].
however, it's not returning the right values. It is supposed to return the minimal cost from 2 points using any possible path.
all ".value" are the cost to use this Node
all ".bestFromStart" are the max of long int field.
all ".status" are "CLOSED"
any help would be appriciated!!


the function all first called with
father==NULL


/* a brief breakdown of this algorithm:
We have defined a high value (currently the limit of "long int") as the "error"
return.
We start searching the matrix. If at any point it we find that the way we are
trying is longer allredy that the best existing way through specific node, we
return LARGE, meaning do not continue searching throuh this node.
We make sure we dont recourse though a node that has allready been included in
the current path by setting it's status to OPEN upon enterting the recusrive
part of the program. If we now will reach any node which is OPEN, we return 
LARGE- an ending value.
We then search in all derections for any result that doesnt return large and 
return to the main fuction the smallest of all directions.
This way is not entirely fault tolerent because it does not deal with the case
of value=LARGE, but on the other hand it's not meant to deal with value>LARGE
either.
*/
long int GetMin(Node** matrix,int currentR,int currentC,int endR,int endC,
				int rows,int columns,Node* father)
{
	long int result;

	//if out of bounds return max of field
	if (currentR==rows || currentC==columns || currentR<0 || currentC<0)
		return LARGE;

	//if reached end
	if (currentC==endC && currentR==endR)
		return (matrix[currentR][currentC].value);

	//if already checked here
	if (matrix[currentR][currentC].status==OPEN)
		return LARGE;

/*record distance from beggining*/
	//if first node
	if (father==NULL)
		//assign first value as best value
		matrix[currentR][currentC].bestFromStart=
			matrix[currentR][currentC].value;
	//if not first node
	else
	{
		//if bestFromStart old value higher than current value 
		if ( (matrix[currentR][currentC].value +
			father->bestFromStart ) <
			matrix[currentR][currentC].bestFromStart )
			//then...
			matrix[currentR][currentC].bestFromStart=
				matrix[currentR][currentC].value+				
				father->bestFromStart;
		else
			/*this is a bad path - 
			this way is not shorter than previously found way*/
			return LARGE;
	} 	
	
	//if not reached end	
	matrix[currentR][currentC].status=OPEN;
	result=Smallest4(
		GetMin(matrix,currentR,currentC+1,endR,endC,rows,columns,
		&(matrix[currentR][currentC])),
		GetMin(matrix,currentR,currentC-1,endR,endC,rows,columns,
			&(matrix[currentR][currentC])),
		GetMin(matrix,currentR+1,currentC,endR,endC,rows,columns,
			&(matrix[currentR][currentC])),
		GetMin(matrix,currentR-1,currentC,endR,endC,rows,columns,
			&(matrix[currentR][currentC])));

	//set current status to closes- can try here again	
	matrix[currentR][currentC].status=CLOSED;
	
	//if was blocked all directions
	if (result==LARGE)
		return LARGE;

	return matrix[currentR][currentC].value+result;
}

Your GetMin algorithm looks okay. You should post more code. The problem could be in Smallest4 or with the initialization of your matrix.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.