程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> POJ2236 Wireless Network 第一次做並查集,第一次寫博客,poj2236wireless

POJ2236 Wireless Network 第一次做並查集,第一次寫博客,poj2236wireless

編輯:C++入門知識

POJ2236 Wireless Network 第一次做並查集,第一次寫博客,poj2236wireless


    題意是判斷兩台電腦是否能通訊,兩台修好的電腦距離在指定距離內可直接通訊,且兩台修好的電腦能通過一台修好的電腦間接通訊。代碼如下:

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;

int father[1005];
struct Coord //電腦坐標
{
    int x;
    int y;
} coo[1005];
struct Repair //已修復好的電腦的坐標和編號
{
    int x;
    int y;
    int numb;
} rep[1005];

int Find_fath(int x) //並查集尋找父親
{
    if (x != father[x])
        father[x] = Find_fath(father[x]); //壓縮返回路徑
    return father[x];
}
void Union(int x,int y) //並查集父親合並
{
    x=Find_fath(x);
    y=Find_fath(y);
    if(x!=y)
        father[y]=x;
}
int main()
{
    //freopen("in.txt","r",stdin);
    int n,d;
    int num_rep=0; //修復電腦的數量
    char oper; //對電腦的操作
    cin>>n>>d;
    for(int i=1; i<=n; i++)
        scanf("%d%d",&coo[i].x,&coo[i].y);
    for(int i=1; i<=n; i++)
        father[i]=i;        //初始化父親為自己
    getchar();
    while(scanf("%c",&oper)!=EOF)
    {
        if(oper=='O')
        {
            int numb;
            scanf("%d",&numb);
            rep[num_rep].x=coo[numb].x;
            rep[num_rep].y=coo[numb].y;
            rep[num_rep].numb=numb;
            for(int i=0; i<num_rep; i++)
            {
                if(num_rep==0)break;
                int a,b;
                a=rep[i].x-rep[num_rep].x;
                b=rep[i].y-rep[num_rep].y;
                if(a*a+b*b<=d*d)
                    Union(rep[i].numb,rep[num_rep].numb);
            }
            num_rep++;
        }
        else
        {
            int num1,num2;
            scanf("%d%d",&num1,&num2);
            if(Find_fath(num1)==Find_fath(num2))
                printf("SUCCESS\n");
            else
                printf("FAIL\n");
        }
        getchar();
    }
    return 0;
}

不足之處,望多指點改正。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved