Project Euler #11. Is the logic in my program wrong?
The problem can be found here : http://projecteuler.net/problem=11

Yesterday I saw project Euler and I am hooked up to it. I made a code to solve problem 11 but for some reason that is not visible to me the answer is coming out to be wrong.

Can anybody read my code and suggest anything? 

    #include <iostream>
    using namespace std;

    int input [20][20] ={{8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8},   {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0},
    {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65},
    {52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91},
    {22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},
    {24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50},
    {32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},
    {67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},
    {24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
    {21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95},
    {78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92},
    {16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57},
    {86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58},
    {19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40},
    {4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66},
    {88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69},
    {4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},
    {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16},
    {20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54},
    {1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48}};

    /* if element is a[i][j], its diagonal to the right is a[i+1][j+1]
    if element is a[i][j], its diagonal to the left is a[i-1][j-1]	
    IF element is a[i][j], the element below it is a[i+1][j]
    IF element is a[i][j], the element on right of it is a[i][j+1]
    */


    /*
    approach:
    
    => find the greatest product of diagonals
    => find the greatest prodct of elements below each other
    => find the greatest prodct of element on right of each other
    => compare these three
    */

    int main(void)
    {

	unsigned long hr=0,hb=0,hdr=0, hdl=0;
    //hr is the highest product on the right side traversal
    //similraly for others


	//for diagonal right
	for(int i =0; i<17;i++) //going from 0 to 16 so that we dont land up beyond the array for (i+1),(j+1) etc
	{
		for(int j=0;j<17;j++)
		{
			if(input[i][j]*input[i+1][j+1]*input[i+2][j+2]*input[i+3][j+3] > hdr)
			{
				hdr = input[i][j]*input[i+1][j+1]*input[i+2][j+2]*input[i+3][j+3];
				
			}
		}
	}
	
	
	for(int i =19; i>=3;i--)		//for diagonal left
	{
		for(int j=19;j>=3;j--)
		{
			if(input[i][j]*input[i-1][j-1]*input[i-2][j-2]*input[i-3][j-3] > hdl)
			{
				hdl = input[i][j]*input[i-1][j-1]*input[i-2][j-2]*input[i-3][j-3];
				
			}
		}
	}
	
	
	for(int i =0; i<17;i++)		//for elements below each other
	{
		for(int j=0;j<20;j++)
		{
			if(input[i][j]*input[i+1][j]*input[i+2][j]*input[i+3][j] > hb)
			{
				hb = input[i][j]*input[i+1][j]*input[i+2][j]*input[i+3][j];
			}
		}
	}
	
	for(int i =0; i<20;i++)		//on right
	{
		for(int j=0;j<17;j++)
		{
			if(input[i][j]*input[i][j+1]*input[i][j+2]*input[i][j+3] > hr)
			{
				hr = input[i][j]*input[i][j+1]*input[i][j]*input[i][j+3];
			}
		}
	}
	
	
	if(hdr>hb && hdr > hr && hdr>hdl )
	{
		cout<<hdr<<endl;
	}
	else if (hb > hdr && hb > hr && hb>hdl)
	{
		cout<<hb<<endl;
	}
	else if(hr>hb && hr> hdr && hr > hdl)
	{
		cout<<hr<<endl;
	}
	else
	{
		cout<<hdl<<endl;
	}
	return 0;
    }
Project Euler #11. Is the logic in my program wrong?
===

The problem can be found here : http://projecteuler.net/problem=11

Yesterday I saw project Euler and I am hooked up to it. I made a code to solve problem 11 but for some reason that is not visible to me the answer is coming out to be wrong.

Can anybody read my code and suggest anything? 

    #include <iostream>
    using namespace std;

    int input [20][20] ={{8,2,22,97,38,15,0,40,0,75,4,5,7,78,52,12,50,77,91,8},   {49,49,99,40,17,81,18,57,60,87,17,40,98,43,69,48,4,56,62,0},
    {81,49,31,73,55,79,14,29,93,71,40,67,53,88,30,3,49,13,36,65},
    {52,70,95,23,4,60,11,42,69,24,68,56,1,32,56,71,37,2,36,91},
    {22,31,16,71,51,67,63,89,41,92,36,54,22,40,40,28,66,33,13,80},
    {24,47,32,60,99,3,45,2,44,75,33,53,78,36,84,20,35,17,12,50},
    {32,98,81,28,64,23,67,10,26,38,40,67,59,54,70,66,18,38,64,70},
    {67,26,20,68,2,62,12,20,95,63,94,39,63,8,40,91,66,49,94,21},
    {24,55,58,5,66,73,99,26,97,17,78,78,96,83,14,88,34,89,63,72},
    {21,36,23,9,75,0,76,44,20,45,35,14,0,61,33,97,34,31,33,95},
    {78,17,53,28,22,75,31,67,15,94,3,80,4,62,16,14,9,53,56,92},
    {16,39,5,42,96,35,31,47,55,58,88,24,0,17,54,24,36,29,85,57},
    {86,56,0,48,35,71,89,7,5,44,44,37,44,60,21,58,51,54,17,58},
    {19,80,81,68,5,94,47,69,28,73,92,13,86,52,17,77,4,89,55,40},
    {4,52,8,83,97,35,99,16,7,97,57,32,16,26,26,79,33,27,98,66},
    {88,36,68,87,57,62,20,72,3,46,33,67,46,55,12,32,63,93,53,69},
    {4,42,16,73,38,25,39,11,24,94,72,18,8,46,29,32,40,62,76,36},
    {20,69,36,41,72,30,23,88,34,62,99,69,82,67,59,85,74,4,36,16},
    {20,73,35,29,78,31,90,1,74,31,49,71,48,86,81,16,23,57,5,54},
    {1,70,54,71,83,51,54,69,16,92,33,48,61,43,52,1,89,19,67,48}};

    /* if element is a[i][j], its diagonal to the right is a[i+1][j+1]
    if element is a[i][j], its diagonal to the left is a[i-1][j-1]	
    IF element is a[i][j], the element below it is a[i+1][j]
    IF element is a[i][j], the element on right of it is a[i][j+1]
    */


    /*
    approach:
    
    => find the greatest product of diagonals
    => find the greatest prodct of elements below each other
    => find the greatest prodct of element on right of each other
    => compare these three
    */

    int main(void)
    {

	unsigned long hr=0,hb=0,hdr=0, hdl=0;
    //hr is the highest product on the right side traversal
    //similraly for others


	//for diagonal right
	for(int i =0; i<17;i++) //going from 0 to 16 so that we dont land up beyond the array for (i+1),(j+1) etc
	{
		for(int j=0;j<17;j++)
		{
			if(input[i][j]*input[i+1][j+1]*input[i+2][j+2]*input[i+3][j+3] > hdr)
			{
				hdr = input[i][j]*input[i+1][j+1]*input[i+2][j+2]*input[i+3][j+3];
				
			}
		}
	}
	
	
	for(int i =19; i>=3;i--)		//for diagonal left
	{
		for(int j=19;j>=3;j--)
		{
			if(input[i][j]*input[i-1][j-1]*input[i-2][j-2]*input[i-3][j-3] > hdl)
			{
				hdl = input[i][j]*input[i-1][j-1]*input[i-2][j-2]*input[i-3][j-3];
				
			}
		}
	}
	
	
	for(int i =0; i<17;i++)		//for elements below each other
	{
		for(int j=0;j<20;j++)
		{
			if(input[i][j]*input[i+1][j]*input[i+2][j]*input[i+3][j] > hb)
			{
				hb = input[i][j]*input[i+1][j]*input[i+2][j]*input[i+3][j];
			}
		}
	}
	
	for(int i =0; i<20;i++)		//on right
	{
		for(int j=0;j<17;j++)
		{
			if(input[i][j]*input[i][j+1]*input[i][j+2]*input[i][j+3] > hr)
			{
				hr = input[i][j]*input[i][j+1]*input[i][j]*input[i][j+3];
			}
		}
	}
	
	
	if(hdr>hb && hdr > hr && hdr>hdl )
	{
		cout<<hdr<<endl;
	}
	else if (hb > hdr && hb > hr && hb>hdl)
	{
		cout<<hb<<endl;
	}
	else if(hr>hb && hr> hdr && hr > hdl)
	{
		cout<<hr<<endl;
	}
	else
	{
		cout<<hdl<<endl;
	}
	return 0;
    }