#include #include #include #include #include using namespace std; #define MAXN 222 #define inf 1<<30 struct Point{ int x,y; }point[MAXN]; int value[MAXN][MAXN]; int map[MAXN][MAXN]; int dist[MAXN][MAXN]; int dd[MAXN]; bool mark[MAXN][MAXN]; int dp[1<<14][14]; int n,m,k; int dir[4][2]={{-1,0},{1,0},{0,-1},{0,1}}; void spfa(int num) { memset(mark,false,sizeof(mark)); for(int i=0;i >que; que.push(make_pair(point[num].x,point[num].y)); if(dist[point[num].x][point[num].y]==-1)return; dist[point[num].x][point[num].y]=0; while(!que.empty()){ int x=que.front().first,y=que.front().second; que.pop(); mark[x][y]=false; if(x==0||x==(n-1)||y==0||y==(m-1)){ dd[num]=min(dd[num],dist[x][y]); } for(int i=0;i<4;i++){ int xx=x+dir[i][0],yy=y+dir[i][1]; if(xx>=0&&xx=0&&yy