代码调试
  • 板块学术版
  • 楼主xu_zhihao
  • 当前回复2
  • 已保存回复2
  • 发布时间2024/3/28 20:49
  • 上次更新2024/3/28 22:32:00
查看原帖
代码调试
1063855
xu_zhihao楼主2024/3/28 20:49

三重循环为啥结束不了 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;
} 
2024/3/28 20:49
加载中...