Backtracking algorithm:
Main()
Create a 9x9 array to hold the sudoku.
Populate the sudoku.
call solve, passing the sudoku and values (0,0,0) - representing the last row, column, and # you tried.
Check the return value. If false, report no solution else print solution.
Solve()
Each cell can either be solved or empty. Iterate cells from the passed cell reference until you find one that is empty or you have solved all cells. If you have solved all cells, return success.
If that cell passed is the cell passed in, increment the # to attempt. Else, start with 1.
Check the cell to see if # can legally be placed. If not, increment #.
If no number from 1 to 9 can legally be placed, exit Solve with a failure.
Else if you can find a legal move, call Solve recursively with the new grid.