三重循环为啥结束不了 QWQ
#include<bits/stdc++.h>
using namespace std;
int mp[110][110];
const int N=110;
vector<pair<int,int>> v[N*N*2];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
int m,n;
int id(int a,int b)
{
return (a-1)*m+b;
}
void add(int a,int b,int p)
{
v[a].push_back(make_pair(b,p));
}
int dis[22222];
void djs(int strart)
{
memset(dis,0,sizeof(dis));
dis[strart]=0;
priority_queue<pair<int,int>>q;
q.push(make_pair(0,strart));
while(!q.empty())
{
pair<int,int> top=q.top();q.pop();
int d=-top.first;
//cout<<d<<endl;
int name=top.second;
if(dis[name]<d)
{
continue;
}
int l=v[name].size();
for(int i=0;i<l;i++)
{
int to=v[name][i].first;
int w=v[name][i].second;
if(dis[i]==-1 || dis[name]+w<dis[to])
{
dis[to]=dis[name]+w;
q.push(make_pair(-dis[to],to));
}
}
}
cout<<dis[id(m,m)];
}
int main()
{
cin>>m>>n;
for(int i=1;i<=m;i++)
{
for(int j=1;j<=m;j++)
{
mp[i][j]=-1;
}
}
int x,y,c;
for(int i=0;i<n;i++)
{
cin>>x>>y>>c;
mp[x][y]=c;
}
for(int i=1;i<=m;i++)//这里三重循环为啥结束不了
{
for(int j=1;j<=m;j++)
{
for(int k=0;k<4;k++)
{
//cout<<i<<" "<<endl;
int x=i+dx[k];
int y=j=dy[k];
if(x<1 || x>m || y<1 || y>m) continue;
if(mp[x][y]!=-1 && mp[i][j]!=-1)
{
add(id(i,j),id(x,y),(mp[i][j]!=mp[x][y]));
}
if(mp[i][j]!=-1 && mp[x][y]==-1)
{
mp[x][y]=0;
add(id(i,j),id(x,y),2+(mp[i][j]!=mp[x][y]));
mp[x][y]=1;
add(id(i,j),id(x,y)+m*m,2+(mp[i][j]!=mp[x][y]));
mp[x][y]=-1;
}
if(mp[i][j]==-1 && mp[x][y]!=-1)
{
mp[i][j]=0;
add(id(i,j),id(x,y),mp[i][j]!=mp[x][y]);
mp[i][j]=1;
add(id(i,j)+m*m,id(x,y),mp[i][j]!=mp[x][y]);
mp[i][j]=-1;
}
}
}
}
djs(1);
return 0;
}