X-man

导航

八数码问题(未解决)

#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;
}

 

posted on 2013-10-01 15:00  雨钝风轻  阅读(198)  评论(0编辑  收藏  举报