에러메세지가 shift exponent 인데 처음봄... shift하다가 문제가 생긴건가? 

혹시 아래 코드에서 shift exponent가 발생할만한 부분좀 조언해주실분


#include<bits/stdc++.h>

using namespace std;

typedef long long ll;

int n,m,island;

string arr[55];

int num[55][55];

int edge[55][55];

int dy[4] = {1,-1,0,0};

int dx[4] = {0,0,1,-1};

void dijkstra(int start,int y,int x){

int dist[55][55];

memset(dist,-1,sizeof(dist));

dist[y][x] = 0;

priority_queue<vector<int>,vector<vector<int>>,greater<vector<int>>>pq;

pq.push({dist[y][x],y,x});

while(!pq.empty()){

int d = pq.top()[0];

y = pq.top()[1];

x = pq.top()[2];

pq.pop();

if(dist[y][x]<d) continue;

for(int i=0; i<4; i++){

int yy = y+dy[i];

int xx = x+dx[i];

if(yy<0 || xx<0 || yy>=n || xx>=m) continue;

else if(arr[yy][xx]=='.') continue;

else if(arr[yy][xx]=='X'){

if(dist[yy][xx]==-1 || dist[yy][xx]>d){

dist[yy][xx] = d;

pq.push({d,yy,xx});

}

}

else{

if(dist[yy][xx]==-1 || dist[yy][xx]>d+1){

dist[yy][xx] = d+1;

pq.push({d+1,yy,xx});

}

}

}

}

for(int i=0; i<n; i++){

for(int j=0; j<m; j++){

if(arr[i][j]=='X') edge[start][num[i][j]] = dist[i][j];

}

}

}

int dp[20][(1<<18)];

int f(int cur,int state){

int&ret = dp[cur][state];

if(~ret) return ret;

ret = INT32_MAX/10;

if(state==((1<<island)-1)) return ret = 0;

for(int i=0; i<island; i++){

if( ((1<<i)&state)==0 ) ret = min(ret,edge[cur][i]+f(i,state|(1<<i)));

}

return ret;

}

int main(){

ios_base::sync_with_stdio(false); cin.tie(NULL);

cin>>n>>m;

for(int i=0; i<n; i++) cin>>arr[i];

for(int i=0; i<n; i++){

for(int j=0; j<m; j++){

if(arr[i][j]=='X'){

num[i][j] = island;

island++;

}

}

}

for(int i=0; i<n; i++){

for(int j=0; j<m; j++){

if(arr[i][j]=='X') dijkstra(num[i][j],i,j);

}

}

memset(dp,-1,sizeof(dp));

int ans = INT32_MAX;

for(int i=0; i<island; i++) ans = min(ans,f(i,(1<<i)));

cout<<ans;

}