数组中有函数,我想对其进行排序,并使用具有最低值的函数。我正在尝试制作一个AI,可以解决Simon Tatham Sixteen [3x3]游戏。函数是运算符,而AI会选择值最低的运算符。
int tomb[3][3]={3,4,7,8,1,2,9,5,6};
int cel[3][3]={1,2,3,4,5,6,7,8,9};
int heurisztika(int tomb[3][3], int cel[3][3]){
int i, j, k, l, counter=0, count2=0;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
if(tomb[i][j]!=cel[i][j]){
counter++;
}
}
}
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++){
for(l=0;l<3;l++){
if(cel[i][j]==tomb[k][l]){
if(i==k && j==l){
count2=count2+0;
}
else if(i==k || j==l){
count2=count2+1;
}
else if(i!=k && j!=l){
count2=count2+2;
}
}
}
}
}
}
return counter + count2;
}
int Sor1Balra(int tomb[3][3]){ //every function look like this
int tmp;
tmp=tomb[0][2];
tomb[0][2]=tomb[0][0];
tomb[0][0]=tomb[0][1];
tomb[0][1]=tmp;
int ertek=heurisztika(tomb,cel);
return ertek;
}
int (*operatorok[9])(tomb) = {Sor1Balra, Sor1Jobbra, Sor2Balra, Sor2Jobbra, Sor3Balra, Sor3Jobbra, Oszlop1Fel, Oszlop1Le, Oszlop2Fel, Oszlop2Le, Oszlop3Fel, Oszlop3Le};
答案 0 :(得分:4)
您应该像这样从qsort
调用stdlib.h
函数
qsort((void*)arr, size, sizeof(arr[0]), comparator)
其中arr
是数组的名称,comparator
是比较两个函数的函数。我假设此函数没有参数。
typedef int (*myFuncDef)();
int comparator(const void *p, const void *q)
{
myFuncDef l = *((myFuncDef*)p);
myFuncDef r = *((myFuncDef*)q);
return (l() - r());
}
答案 1 :(得分:2)
数组函数的最小值是返回最小值的函数。
为了确定这一点,您的sort函数必须调用每个数组函数,并查看每两个函数返回的内容,例如像冒泡排序,但不是比较数组元素,而是比较函数返回的值,例如:
if (a[i]() > a[i+1]()) /*swap*/
当然,这假定函数将始终返回相同的值。