#深搜#洛谷 3956 棋盘

本文提供了两段关于NOIP竞赛的代码实现,第一段代码直接输出-1,表达了作者最初尝试失败的心情;第二段代码通过深度优先搜索算法解决了棋盘路径问题,并详细展示了如何根据棋盘的颜色变化来调整路径成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#NOIP血腥的……

#include <cstdio>
#include <algorithm>
using namespace std;
int ans=2147483647,n,m,x,y,t,u;
int main(){
	freopen("chess.in","r",stdin);
	freopen("chess.out","w",stdout);
    printf("%d",-1);
	return 0;
}

好不开心。
后来重新做了一遍,做对了!

#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int dx[4]={-1,1,0,0},dy[4]={0,0,-1,1};
int d[101][101],f[101][101],n,m,x,y,t,ans=2139062143;
void dfs(short x,short y,short sum,bool fl){
    if (x<1||x>m||y<1||y>m) return;//边界
    if (sum>=f[x][y]) return;//超过了不要了
    if (x==m&&y==m){ans=(ans>sum)?sum:ans; return;}
    f[x][y]=sum;//赋值
    for (int i=0;i<4;i++){
        int nx=x+dx[i],ny=y+dy[i];
        if (d[nx][ny]){//有颜色
            if (d[nx][ny]==d[x][y]) dfs(nx,ny,sum,0);//颜色相同
            else dfs(nx,ny,sum+1,0);//颜色不同
        }
        else if (!d[nx][ny]&&!fl){//没有颜色没有使用魔法
            d[nx][ny]=d[x][y];//变颜色
            dfs(nx,ny,sum+2,1);
            d[nx][ny]=0;//回溯
        }
    }
}
int main(){
    scanf("%d%d",&m,&n); f[1][1]=0; memset(f,127,sizeof(f));
    for (int i=1;i<=n;i++)
    scanf("%d%d%d",&x,&y,&t),d[x][y]=t+1;
    dfs(1,1,0,0);  if (ans!=2139062143) printf("%d",ans); else printf("-1"); return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值