에러메세지가 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;
}
아니다 해결했음