为什么自定义语句会报错?

P2895 [USACO08FEB] Meteor Shower S

CZCCZC @ 2022-03-30 07:52:18

#include<iostream>
#include<cstdio>
#include<cstring>
#include<string>
#include<stack>
#include<queue>
#include<map>
#include<set>
#include<algorithm>
#include<cstdlib>
#include<iomanip>
using namespace std;
#define MIN (x , y , t)  if(x >= 0 && y >= 0)  death[x][y] = min(death[x][y] , t)
#define MAXN 310
struct coord {
    int x , y ; 
};
queue < coord > Q ;
int ans[MAXN][MAXN] , death[MAXN][MAXN] ; 
int wk[4][2] = {{0 , 1} , {1 , 0} , {-1 , 0} , {0 , -1}} ; 
int main() {
    int m , Ans = 100000 ;
    memset(ans , -1 , sizeof(ans)) ; 
    memset(death , 0x7f , sizeof(death)) ; 
    cin >> m ; 
    for(int i = 1 ; i <= m ; i++) {
        int x , y , t ;
        cin >> x >> y >> t ; 

         MIN(x , y , t) ; 
         for(int k = 0 ; k < 4 ; k++) 
            MIN(x + wk[k][0] , y + wk[k][1] , t) ; 
    }
    Q.push((coord) {0 , 0}) ; 
    ans[0][0] = 0 ; 
    while(!Q.empty()) {
        coord u = Q.front() ; 
        int ux = u.x , uy = u.y ; 
        Q.pop() ; 
        for(int k = 0 ; k < 4 ; k++) {
            int x = ux + wk[k][0] , y = uy + wk[k][1] ; 
            if(x < 0 || y < 0 || ans[x][y] != -1 || ans[ux][uy] + 1 >= death[x][y])
                continue ; 
            ans[x][y] = ans[ux][uy] + 1 ; 
            Q.push((coord) {x , y}) ; 
        }
    }
    for(int i = 0 ; i <= 305 ; i++) 
        for(int j = 0 ; j <= 305 ; j++) 
            if(death[i][j] > 1000 && ans[i][j] != -1)
                Ans = min(Ans , ans[i][j]);
    if(Ans == 100000) 
        puts("-1") ; 
    else
        cout << ans << endl ; 
    return 0 ; 
}

自定义的MIN语句错误(第十三行),哪位大佬能帮我看一下?


by wtcqwq @ 2022-03-30 07:56:17

说实话,整个代码就用了两次MIN

还是不偷懒好


by wtcqwq @ 2022-03-30 07:59:03

具体原因是

你的

#define MIN (x , y , t)  if(x >= 0 && y >= 0)  death[x][y] = min(death[x][y] , t)

这一句后MIN和(间有空格

MIN(x + wk[k][0] , y + wk[k][1] , t) ; 

这一句MIN和(间没空格


by fzy1026 @ 2022-03-30 08:18:48

话说不是有内置的min()函数么。。。。。


by CZCCZC @ 2022-03-30 08:26:05

@fzy1026 这里的MIN是判断三个数的,内置的min函数只能判断两个数的最小值。


by CZCCZC @ 2022-03-30 08:26:58

@王韬淳 谢谢提醒


by fzy1026 @ 2022-03-30 08:29:11

@CZCCZC 嵌套一下不就得了


by CZCCZC @ 2022-03-30 08:32:13

@fzy1026 这里的MIN函数还需要判断x、y都大于0,自带的是直接求最小值,不分正负。


by Southern_Dynasty @ 2022-03-30 09:45:36

@CZCCZC 深基上的?


by CZCCZC @ 2022-03-30 09:58:03

@暗夜黑黑黑手 对,搜索题单第4题


|