Thread: Sudoku program crashing!

  1. #1
    Registered User
    Join Date
    Jul 2014
    Posts
    41

    Sudoku program crashing!

    The program crashes.It says stack overflow.
    Please help me make it right.
    Code:
    #include<iostream>
    using namespace std;
    static int grid[9][9];
    void input();
    void output();
    void init();
    bool solve();
    bool is_safe(int,int,int);
    bool unassigned(int&,int&);
    int main()
    {
    	init();
    	if (solve())
    		output();
    	else
    		cout << "No solution\n";
    }
    void input()
    {
    	int i, j;
    	for (i = 0; i < 9; i++)
    	{
    		cout << "enter row " << i + 1 << " values:\n";
    		for (j = 0; j < 9; j++)
    		{
    			cin >> grid[i][j];
    			while (grid[i][j]<0 || grid[i][j]>9)
    			{
    				cout << "invalid value.enter again : ";
    				cin >> grid[i][j];
    			}
    		}
    	}
    }
    void output()
    {
    	int i, j;
    	for (i = 0; i<9; i++)
    	{
    		cout << '\t';
    		if (i == 3 || i == 6)
    			cout << "-----------\n\t";
    		for (j = 0; j<9; j++)
    		{
    			if (j == 3||j==6)
    				cout << '|';
    			cout << grid[i][j];
    		}
    		cout << endl;
    	}
    }
    void init()
    {
    	char ans;
    	do
    	{
    		input();
    		output();
    		cout << "is it correct (y/n) ? "; cin >> ans;
    		if (ans == 'y' || ans == 'Y')break;
    		cout << "Please try again.\n";
    	} while (true);
    }
    bool solve()
    {
    	int k;
    	int row, col;
    	if (!unassigned(row,col))
    		return true;
    	for (k = 1; k <= 9; k++)
    	{
    		if(is_safe(row, col, k))
    			grid[row][col]=k;
    		if (solve())
    			return true;
    		grid[row][col] = 0;
    	}
    	return false;
    }
    bool is_safe(int a, int b,int k)
    {
    	int x, y, i, j;
    	for (i = a, j = 0; j < 9; j++)
    	{
    		if (grid[i][j] == k)
    			return false;
    	}
    	for (j = b, i = 0; i < 9; i++)
    	{
    		if (grid[i][j] == k)
    			return false;
    	}
    	if (a < 3 && b < 3)
    	{
    		for (x = 0; x < 3; x++)
    		for (y = 0; y < 3; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 3 && b < 6)
    	{
    		for (x = 0; x < 3; x++)
    		for (y = 3; y < 6; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 3 && b < 9)
    	{
    		for (x = 0; x < 3; x++)
    		for (y = 6; y < 9; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 6 && b < 3)
    	{
    		for (x = 3; x < 6; x++)
    		for (y = 0; y < 3; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 6 && b < 6)
    	{
    		for (x = 3; x < 6; x++)
    		for (y = 3; y < 6; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 6 && b < 9)
    	{
    		for (x = 3; x < 6; x++)
    		for (y = 6; y < 9; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 9 && b < 3)
    	{
    		for (x = 6; x < 9; x++)
    		for (y = 0; y < 3; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 9 && b < 6)
    	{
    		for (x = 6; x < 9; x++)
    		for (y = 3; y < 6; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    	else if (a < 9 && b < 9)
    	{
    		for (x = 6; x < 9; x++)
    		for (y = 6; y < 9; y++)
    		{
    			if (grid[x][y] == k)
    				return false;
    		}
    		return true;
    	}
    }
    bool unassigned(int & i,int & j)
    {
    	for (i = 0; i<9; i++)
    	for (j = 0; j<9; j++)
    	if (grid[i][j]==0)
    	{
    		return true;
    	}
    	return false;
    }

  2. #2
    and the hat of int overfl Salem's Avatar
    Join Date
    Aug 2001
    Location
    The edge of the known universe
    Posts
    39,666
    Code:
            if(is_safe(row, col, k))
                grid[row][col]=k;
            if (solve())
    If the assignment doesn't happen, the state of the grid remains unchanged, so you just end up with infinite recursion of solve calling solve.
    If you dance barefoot on the broken glass of undefined behaviour, you've got to expect the occasional cut.
    If at first you don't succeed, try writing your phone number on the exam paper.

Popular pages Recent additions subscribe to a feed

Similar Threads

  1. Trouble with a sudoku program
    By tmorlan1 in forum C Programming
    Replies: 3
    Last Post: 02-15-2014, 10:08 PM
  2. help me out with my sudoku program
    By suryak in forum C Programming
    Replies: 13
    Last Post: 09-24-2011, 12:51 AM
  3. Need help with a Sudoku verifying program
    By Skeeter in forum C Programming
    Replies: 3
    Last Post: 10-30-2009, 08:15 PM
  4. sudoku program
    By ElemenT.usha in forum C Programming
    Replies: 1
    Last Post: 02-12-2008, 12:51 PM
  5. Sudoku program
    By Feite in forum C++ Programming
    Replies: 4
    Last Post: 11-26-2005, 02:50 AM