⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 poj2432.cpp

📁 本人最近在acm.pku.edu.cn上通过的程序
💻 CPP
字号:
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
using namespace std;

struct Node
{
    int k, pos, d;
    Node(int _k = 0, int _pos = 0, int _d = 0) : k(_k), pos(_pos), d(_d) {}
};

int main()
{
    int p[5010];
    int n, m;
    int i, j;
    scanf("%d %d", &n, &m);
    for (i = 1; i <= n; i++)
        scanf("%d", &p[i]);
    vector<vector<int> > g(n + 1);
    while (m--)
    {
        scanf("%d %d", &i, &j);
        g[i]. push_back(j);
        g[j]. push_back(i);
    }
    set<int> v[5010];
    deque<Node> q;
    q. push_back(Node(1, p[1], 0));
    v[1]. insert(p[1]);
    while (!q. empty())
    {
        Node t = q. front();
        q. pop_front();
        i = t. k; 
        int x = t. pos;
        for (j = 0; j < g[i]. size(); j++)
        {
            int y = g[i][j];
            int d = p[y] - p[i];
            if (d > 180) d -= 360;
            if (d < -180) d += 360;
            if (v[y]. find(x + d) == v[y]. end())
	        {
		        if (y == 1)
		        { 
                    printf("%d\n", t. d + 1); 
                    return 0; 
                }
		        q.push_back(Node(y, x + d, t. d + 1));
		        v[y]. insert(x + d);
	        }
        }
    }
    printf("-1\n");
    return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -