题解 | #棋盘游戏#

棋盘游戏

http://www.nowcoder.com/practice/368c98c7bff54a30bba29ae1ba017d55

棋盘比较小,就dfs来做了
#include<iostream>
#include<cstring>
using namespace std;
int g[6][6];
bool st[6][6];
int c=0;
int res = 1e8;
int dx[4]={-1,0,1,0},dy[4]={0,1,0,-1};
int sx,sy,ex,ey; //起点坐标和终点坐标

void dfs(int x,int y,int state,int cost){
    if(x==ex&&y==ey){ //到达终点,更新cost
        if(cost<res) res = cost;
        return;
    }
    if(cost>res) return; //枝剪
    st[x][y] = true;
    for(int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if(nx<0||nx>5||ny<0||ny>5||st[nx][ny]) continue;
        c=g[nx][ny]*state;
        dfs(nx,ny,(c%4)+1,cost+c);
        st[nx][ny] = false;
    }
    
}
int main(){
    for(int i=0;i<6;i++)
        for(int j=0;j<6;j++) cin>>g[i][j];
    cin>>sx>>sy>>ex>>ey;
    memset(st,false,sizeof st);
    dfs(sx,sy,1,0);
    cout<<res<<endl;
    return 0;
}


全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务