首页 > 试题广场 >

已知如下递归代码用于求解图的m着色问题:#define N&

[单选题]
已知如下递归代码用于求解图的m着色问题:
#define N 10
int a[N+1][N+1]; //存储图
int x[N+1];//记录颜色
int sum=0;//保存可着色方案数

void backtrace(int t,int m)
{
int i;
if(t>N)//搜索至叶节点
{
sum++;
printf("第%d种方案:\n",sum);
for(i=1;i<=N;i++)
printf("%d ",x[i]);
printf("\n");
}
else
{
for(i=1;i<=m;i++) //逐个判断每种颜色
{
if(check(t,i))
{   x[t]=i;
backtrace(t+1,m);
}
}
}
}
其中check()函数用于检测某个节点颜色是否合法,以下check()函数正确的是:
  • int check(int t,int i)//检测函数 {     int j;     for(j=1;j&lt;t;j++)     {         if(a[t][j]==1&amp;&amp;x[i]==j)                  return 0;            }     return 1; }
  • int check(int t,int i)//检测函数 {     int j;     for(j=1;j&lt;t;j++)     {         if(a[t][j]==1||x[i]==j)                  return 0;            }     return 1; }
  • int check(int t,int i)//检测函数 {     int j;     for(j=1;j&lt;t;j++)     {         if(a[t][j]==1||x[j]==i)                  return 0;            }     return 1; }
  • int check(int t,int i)//检测函数 {     int j;     for(j=1;j&lt;t;j++)     {         if(a[t][j]==1&amp;&amp;x[j]==i)                  return 0;            }     return 1; }
a[t][j]==1判断的是存储图这个点是否被第i种颜色着色了,x[j]==i表示这个颜色i是否存在,两个条件都要满足,所以要用&&
发表于 2019-10-04 17:05:41 回复(0)
j&lt,
1&amp,这些都是什么东西
发表于 2019-09-24 20:14:31 回复(0)