1139 First Contact (30 分)

本文介绍了一种名为FirstContact的算法,用于处理在给定坐标系中寻找两点之间已建立联系的最短路径问题。通过vector和map数据结构,算法实现快速比较节点并更新邻接关系,适用于处理大规模数据。着重于解决坐标关联和路径查询,适合信息技术中的网络分析应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1139 First Contact (30 分)

思路有空更新

#include <iostream>
#include <algorithm>
#include <vector>
#include <map>
using namespace std;
struct node{
	int x, y;
};
vector<int> v[10000];
map<int, map<int, int>> m;
bool cmp(node a, node b){
	if(a.x != b.x)
		return a.x < b.x;
	else
		return a.y < b.y;
}
int main() {
    int n, M, k;
    cin >> n >> M;
    while(M--) {
    	string a, b;
    	cin >> a >> b;
    	int x = abs(stoi(a)), y = abs(stoi(b));
    	if(a.length() == b.length()){
    		v[x].push_back(y);
    		v[y].push_back(x);
		}
		m[x][y] = m[y][x] = 1;
	}
	cin >> k;
	while(k--) {
		string a, b;
    	cin >> a >> b;
    	int x = abs(stoi(a)), y = abs(stoi(b));
		vector<node> ans;
		for(int i = 0; i < v[x].size(); ++i)
			for(int j = 0; j < v[y].size(); ++j)
				if(m[v[x][i]][v[y][j]] == 1 && v[x][i] != y && v[y][j] != x)
					ans.push_back({v[x][i], v[y][j]});
		sort(ans.begin(), ans.end(), cmp);
		cout << ans.size() << endl;
		for(int i = 0; i < ans.size(); ++i)
			printf("%04d %04d\n", ans[i].x, ans[i].y);
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值