登录论坛

查看完整版本 : [MATLAB基础] 将C转化成MATLAB


maledong
2010-08-25, 11:30
大家好,我收到一个QQ搜搜的援助,但是我不知道如何把C转化成MATLAB,有谁可以帮忙的请直接到http://wenwen.soso.com/z/q216168970.htm去看看,有100分送。相关代码如下:

#include<stdio.h>
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("<%d>",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<min)
{
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;
}