八数码问题(未解决)

本文介绍了一个使用深度优先搜索(DFS)算法解决八数码问题的C++实现。该程序通过定义一个优先级队列来组织待搜索的状态节点,并且利用了一个自定义的比较运算符来确定节点的优先级。此外,为了判断目标状态是否可解,引入了一种奇偶校验的方法。
#include<stdio.h>
#include<iostream>
#include<string>
#include<queue>
using namespace std;
int f[4][2]={1,0,0,1,-1,0,0,-1};
char map[3][3];
int stx,sty;
string ans;
struct Node
{
    int value;
    int ss[10];
    bool operator <(Node t1,Node t2)
    {
        if(t1.value<t2.value)return false;
        return true;
    }
};
priority_queue<Node>q;

void Dfs(int step,int sum)
{
    while(!q.empty)
    {
        Node t=q.top();
        q.pop();
    }
    for(int i=0;i<n;i++)
    if(t.ss[0]!=i)sum++;
    if(sum==0)return ;

    for()
}
bool Judge()
{
    int ans=0;
    for(int i=1;i<9;i++)
    {
        for(int j=0;j<i;j++)
        {
            if(map[i]<map[j])ans++;
        }
    }
    if(ans&1)return true;
    return false;
}
int main()
{
    int i,j;

    char s[10];
    while(cin.get(s,15))
    {
        //printf("%s\n",s);
        int k=0,ki=0;
        for(i=0;i<3;i++)
            for(j=0;j<3;j++)
            {
                map[i][j]=s[2*k];
                k++;
                if(map[i][j]=='x')
                {
                    stx=i;
                    sty=j;
                }
                else ss[ki++]=map[i][j];
            }
        if(Judge())printf("unsolvable\n");
        else
        {
            Dfs();
            printf("%s\n",ans);
        }
        /*for(i=0;i<3;i++)
        {
            for(j=0;j<3;j++)
            printf("%c ",map[i][j]);
            printf("\n");
        }*/

    }
    return 0;
}

 

转载于:https://www.cnblogs.com/XDJjy/p/3348502.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值