#include<iostream>
#include<queue>
using namespace std;
#define max 1001                  //这里最后不能加分号,否则他把 max 的值定义为“1001;”
int s[10][10];
int t[10][10][5];
int map[4][2]={{1,0},{0,1},{-1,0},{0,-1}};
int i,j,k,x,y;

 

struct node
{
    int x;
    int y;
    int state;
}start,temp,end;

                              //本题关键是不同的state的cost值导致的最少值有所不同,所以都要保留
void insert()
{
    for(i=1;i<9;i++)
        for(j=1;j<9;j++)
            cin>>s[i][j];

    for(i=1;i<=8;i++)
    {
        for(j=1;j<=8;j++)
        {
            for(k=1;k<=4;k++)
                t[i][j][k]=100000000;
        }
    }
    t[start.y][start.x][1]=0;
}


void bfs(queue<struct node>qu)
{
    int v,ans;
    while(!qu.empty())
    {
        temp=qu.front();
        qu.pop();
        for(i=0;i<4;i++)
        {
            x=temp.x+map[i][0];
            y=temp.y+map[i][1];
            if(x>0 && x<9 && y>0 && y<9 )
            {                                       

                start.x=x;
                start.y=y;
                v=t[temp.y][temp.x][temp.state]+temp.state*s[y][x];
                start.state=(temp.state*s[y][x]%4)+1;
                if(v<t[y][x][start.state])
                {
                    qu.push(start);
                    t[y][x][start.state]=v;
                }
                
    //            s[y][x]=max;
            }
        }
    }
    ans=t[end.y][end.x][1];
    for(i=2;i<=4;i++)
    {
        if(ans>t[end.y][end.x][i])
            ans=t[end.y][end.x][i];
    }
    cout<<ans<<endl;
}
                    //清为128之前的数就是一个大数16843009等,清128之后就是负数,清0就是0

int main()
{
    int a[2],b[2];
    while(cin>>a[0]>>a[1]>>b[0]>>b[1] && !(a[0]==0&&a[1]==0&&b[0]==0&&b[1]==0))
    {
        
//        memset(s,max,sizeof(s));          //这里memset好像不能让整个数组s都清值,所以上面不能省
        
        queue<struct node>qu;
        start.x=a[1];
        start.y=a[0];
        start.state=1;
        insert();
        s[a[0]][a[1]]=max;
        
        end.x=b[1];
        end.y=b[0];
        qu.push(start);
        bfs(qu);
        
    }
    return 0;
}

 

posted on 2010-05-12 11:10  VRS  阅读(384)  评论(0)    收藏  举报