まず、バックトラックに入らないで解ける問題の場合、入力ファイルを解析してデータ構造に格納した後、solve関数を呼び出します。この関数は盤面を端からトレースしていき、そのマスが数字の入るマスであればnnal関数を、ヒントの入るマスであればhnal関数を呼び出し、最後まで行っても盤面に変化がなくなるまで繰り返します。この二つの関数はそれぞれ、数字マス側からとヒントマス側からいくつかのルールを適用して数字の入る可能性を絞っていく関数ですから、盤上のすべてのマスがこの関数で変化しなくなったときは、すべてのマスが確定した、つまり解けたか、矛盾が出たか、行き詰まってしまったことになります。これの判定のため、この2関数は変化があったときに0でなくなるswという変数へのポインタを引数として取ります。
この段階で解けた場合、仮定はしていないのでこれ以外の解は有り得ませんから、ここで解けた盤面を出力して終了します。また、矛盾が出た場合は、この問題は解けないということになります。行き詰まったらバックトラックに入るので、これは後述します。
ここで、nnal関数について説明をします。この関数はまずそのマスの数字が確定しているかどうかを確認ます。確定していなければヒントの使える数字とのandを取り、次に解法のところでも説明した「ヒントが10、マスが2マスで、片方に入る数字が2か3ならもう片方は7か8」というルールを適用します。そして、「ヒントが9で使える数の最低が3なら、7,8,9は使えない」というルールを適用します。以上のルールを適用たら、次に確定していた場合の処理に移ります。これは、縦と横のヒントの、使っていない数字とヒントの数字を減らすだけです。
次に、hnal関数について説明します。この関数は縦ヒントと横ヒントのそれぞれについて、まだ埋まっていないマスの数を見て、0だったら無視、1だったらそのマスに入る数字は確定するので、それを使っていない数字に書き込みます。また、2以上だった場合は、knapsack関数を呼び出して、数字の入る可能性を削ります。この関数はナップザック問題に似たことをやるので、このような名前になったのですが、実際の挙動としては、1~9のうち、いくつかの数字をいくつか用いてある数を作るとき、それに使える数字をすべて返します。たとえば、1,2,3,4,5,7のうち2個を使って使って8を作るときは、2,4は使えないので、1,3,5,7をデータ構造のページで示した形式で返します。ちなみに、nnal、hnal共に、入る数字の可能性が絞れた場合は引数としてポインタを渡されたswをインクリメントします。また、可能性を絞っていて矛盾が出たときはfalseを、出なかったときはtrueを返します。
最後に、solve関数の処理で行き詰まった場合のバックトラックについて説明します。backtrack関数は呼び出されると、まず作業用の盤面を確保し、それのポインタを現在の盤面と同じ様につなぎます。次に仮定を立てるのですが、人間が何か仮定をする場合は「矛盾の出そうなところ」から手をつけますが、そんなヒューリスティクスはとても組みこめないので端から順に手をつけていきます。数字のマスを見つけたら、まずそこに使える数字の可能性をトレースし、小さいほうから作業用の盤面に確定させ、solve関数を呼び出します。その結果によって、「さらにバックトラック」、「矛盾が出たので今の仮定は排除」、「解けたので次の可能性にチャレンジ」の3つの場合に別れます。ですが、深さ優先探索なので、結局ははじめに仮定を置いたマスのすべての可能性にトライして、それまでに一度でも解が出ていれば無事終了、出ていなければこの問題は解けないというメッセージを残して逃亡ということになります。