将C转化成MATLAB
大家好,我收到一个QQ搜搜的援助,但是我不知道如何把C转化成MATLAB,有谁可以帮忙的请直接到http://wenwen.soso.com/z/q216168970....��码如下:
#include
int map[9][9]={0,0,3,8,1,0,0,0,9,
5,0,0,4,0,0,0,8,0,
0,6,0,9,0,0,1,0,0,
0,0,8,0,3,0,0,0,6,
0,0,0,0,0,0,0,0,0,
9,0,0,6,0,0,5,0,0,
0,0,6,0,0,9,0,1,0,
0,1,0,0,0,5,0,0,4,
2,0,0,0,4,8,7,0,0};
void display()
{
int i;
int j;
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(map[i][j])
{
printf("",map[i][j]);
}
else
{
printf("< >");
}
}
printf("\n");
}
}
int check(int x,int y,int *mark)//check函数为该格子可以选择的数字
{
int i;
int j;
int gi;
int gj;
int count = 0;
for(i=1;i<=9;i++)
{
mark[i]=0;//初始化
}
for(i=0;i<9;i++)
{
mark[map[x][i]]=1; //表示该行该数字已存在
mark[map[i][y]]=1; //表示该列该数字已存在
}
gi=x/3*3;//九宫格把map分割成9个小块,如果该格子所在行列为(1,4),那么它所在子格子起始为(0,3)到(2,5)的九个小格子
gj=y/3*3;
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
mark[map[gi+i][gj+j]]=1;//此循环为表示所在子格子的九个小格子中已存在该数字
}
}
for (i=1;i<=9;i++)
{
if(0==mark[i]) //如果该数字不存在则++
{
count++;
}
}
return count;
}
void crack()//?
{
int i;
int j;
int mark[10]; //标志数字是否已存在
int min=10; //记录最少可能数字数
int ci=-1; //ci,cj用来记录最少可能数字的格子所在行列
int cj;
for (i=0;i<9;i++)
{
for(j=0;j<9;j++)
{
if(map[i][j])
{
continue; //如果该格子已有数字则跳到下一个格子
}
int c=check(i,j,mark); //c为该格子可以选择的数字
if(0==c)
{
return;
}
if(c
{
ci=i;
cj=j;
min=c;
}
}
}
if(-1==ci)
{
printf("The answer is:\n");
display();
return;
}
check(ci,cj,mark);//这个语句的作用是把mark这个数组设置成最小可能格子缺少的数字,若缺少则为0
for(i=1;i<=9;i++)
{
if(mark[i]==0)
{
map[ci][cj]=i; //先填入该数字
crack(); //进行判断
}
map[ci][cj]=0; //若这个数字不可以得到解则判断下一可能数字(这里类似0-1背包问题)
}
}
int main()
{
printf("The game is:\n");
display();
crack();
return 0;
}