车辆调度 D题 科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛

“科大讯飞杯”第十七届同济大学程序设计预选赛暨高校网络友谊赛

D题
车辆调度

  • 数据量很小10x10,直接dfs
  • 搜索树深度<=5,每一层枚举每辆车向4个方向走的方案
  • 当递归深度==K时判断是否有车停在目标点
#define debug
#ifdef debug
#include 
#include "/home/majiao/mb.h"
#endif
 
 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#define MAXN ((int)1e5+7)
#define ll long long int
#define QAQ (0)
#include 
 
using namespace std;
 
int n, m, K;
int dr[] = { 1, -1, 0, 0 }; //4个方向
int dc[] = { 0, 0, 1, -1 };
char mtx[16][16], tmp[16][16]/*用来模拟车的位置(0没有车,1有车)*/;
struct Node {
    int r, c;
} ;
 
bool check(int x, int y) { //判断是否越界
    return mtx[x][y];
}
 
bool ok = false;
void dfs(int level, vector v) {
    if(ok) return ;
    if(level == K) { //第level步恰好有在目标格子的车就ok=true
        for(int i=1; i<=n; i++)
            for(int k=1; k<=m; k++)
                if(tmp[i][k] && mtx[i][k]=='D') {
                    ok = true;
                    goto p;
                }
        p:
        return ;
    }
    for(int i=0; i vec;
    for(int i=1; i<=n; i++) {
        scanf("%s ", mtx[i]+1);
        for(int k=1; k<=m; k++)
            if(mtx[i][k] == 'R') vec.push_back({i, k});
    }
    dfs(0, vec);
    printf("%s\n", ok ? "YES" : "NO");
 
 
 
#ifdef debug
    clock_t etime = clock();
    printf("rum time: %lf 秒\n",(double) (etime-stime)/CLOCKS_PER_SEC);
#endif
    return 0;
}

你可能感兴趣的:(dfs)