79 /*检查i行j列是否可放置num*/
80 int Check(int i,int j,int num)
81 {
82 return CheckSquare(i,j,num) && CheckLine(i,j,num) && CheckColumn(i,j,num);
83 }
84
85 /*检查是否完成*/
86 int IsDone()
87 {
88 int i,j;
89 for(i = 0;i < 9;i++)
90 for(j = 0;j < 9;j++)
91 if(!Check(i,j,data[i][j]) || (data[i][j] == 0))
92 return 0;
93 return 1;
94 }
95
96 void Calc()
97 {
98 int i,j,x;
99 if(IsDone())
100 {
101 output();
102 return;
103 }
104 for(i = 0;i < 9;i++)
105 {
106 for(j = 0;j < 9;j++)
107 {
108 if(data[i][j] == 0)
109 {
110 for(x = 1; x <= 9;x++)
111 {
112 if(Check(i,j,x))
113 {
114 data[i][j] = x;
115 Calc();
116 }
117 }
118 if(x == 10)
119 {
120 data[i][j] = 0;
121 return ;
122 }
123 }
124 }
125 }
126 }
127
128 int main()
129 {
130 // input();
131 Calc();
132 output();
133
134 return 0;
135 }
上述程序中,数字0表示该位置为空,待填入数字。