Artificial intelligence 为什么这个8字谜是可以解决的?

Artificial intelligence 为什么这个8字谜是可以解决的?,artificial-intelligence,breadth-first-search,a-star,sliding-tile-puzzle,inversion,Artificial Intelligence,Breadth First Search,A Star,Sliding Tile Puzzle,Inversion,所以我正在编写一个程序,用BFS、a*和UCS解决8个难题。根据分配,目标状态是固定的,如下所示: Goal State: |1 2 3| |8 4| |7 6 5| 但是,在编写getInvCount(int[]a)方法时: public static boolean getInvCount(int [] a) { int [] arr = a; int inv_count = 0; for(int i = 0;i<arr.length-1;i++){

所以我正在编写一个程序,用BFS、a*和UCS解决8个难题。根据分配,目标状态是固定的,如下所示:

Goal State:
|1 2 3|
|8   4|
|7 6 5|   
但是,在编写
getInvCount(int[]a)
方法时:

public static boolean getInvCount(int [] a)
{
    int [] arr = a;
    int inv_count = 0;
    for(int i = 0;i<arr.length-1;i++){
        for(int j = i + 1; j < arr.length;j++){
            if(arr[i]>arr[j]){
                inv_count++;
                
            }
        }
        
    }
    System.out.println(inv_count);
public静态布尔getInvCount(int[]a)
{
int[]arr=a;
int inv_count=0;
对于(int i=0;iarr[j]){
存货盘点++;
}
}
}
系统输出打印项次(库存计数);
我意识到初始拼图有9个倒数,这是一个奇数。然而,程序成功地找到了解决方案。
在一个谜题被认为是可解的要求中,我缺少什么吗?

您的
getInvCount
函数仅对“1 2 3 4 5 6 7 8”目标状态有效。“反转”是指两个分片的顺序与目标状态不同。如果目标状态严格增加,比较
arr[i]>arr[j]
只是对反转的正确检查。

好的,那么在这种情况下,检查反转次数的最佳方法是什么,因为arr[i]>arr[j]不起作用?
public static boolean getInvCount(int [] a)
{
    int [] arr = a;
    int inv_count = 0;
    for(int i = 0;i<arr.length-1;i++){
        for(int j = i + 1; j < arr.length;j++){
            if(arr[i]>arr[j]){
                inv_count++;
                
            }
        }
        
    }
    System.out.println(inv_count);