`
暴风雪
  • 浏览: 389180 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

[dfs]zoj 3761

 
阅读更多

大致思路:

       每一行的点和每一列的点都连上边,然后用dfs的方法把图变为一颗搜索树,然后由叶子向根删除节点即可

 

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
using namespace std;
const int nMax = 2010;
const int mMax = 3000008;
class edge{
public:
    int v,nex;
};edge e[mMax];
int k,head[nMax];
void addedge(int a,int b){
    e[k].v=b;
    e[k].nex=head[a];
    head[a]=k;k++;
}
class pxx{
public:
    int x,y;
}pos[nMax];
int n,m,vis[nMax],ope[nMax][3],cnt;

void dfs(int loc){
    vis[loc]=1;
    for(int i=head[loc];i;i=e[i].nex){
        int v=e[i].v;
        if(vis[v])continue;
        dfs(v);
        if(pos[v].x==pos[loc].x){
            if(pos[v].y>pos[loc].y){
                ope[cnt][0]=1;
                ope[cnt][1]=v;
                cnt++;
            }else{
                ope[cnt][0]=2;
                ope[cnt][1]=v;
                cnt++;
            }
        }else{
            if(pos[v].x>pos[loc].x){
                ope[cnt][0]=3;
                ope[cnt][1]=v;
                cnt++;
            }else{
                ope[cnt][0]=4;
                ope[cnt][1]=v;
                cnt++;
            }
        }
    }
}
int main(){
    int i,j;
    while(scanf("%d",&n)!=EOF){
        for(i=1;i<=n;i++){
            scanf("%d%d",&pos[i].x,&pos[i].y);
        }
        k=1;
        memset(head,0,sizeof(head));
        for(i=1;i<=n;i++){
            for(j=i+1;j<=n;j++){
                if(pos[i].x==pos[j].x||pos[i].y==pos[j].y){
                    addedge(i,j);
                    addedge(j,i);
                }
            }
        }
        int res=0;
        cnt=0;
        memset(vis,0,sizeof(vis));
        for(i=1;i<=n;i++){
            if(vis[i])continue;
            res++;
            dfs(i);
        }
        printf("%d\n",res);
        for(i=0;i<cnt;i++){
            printf("(%d, %d) ",pos[ope[i][1]].x,pos[ope[i][1]].y);
            if(ope[i][0]==1)printf("DOWN\n");
            else if(ope[i][0]==2)printf("UP\n");
            else if(ope[i][0]==3)printf("LEFT\n");
            else if(ope[i][0]==4)printf("RIGHT\n");
        }
    }
    return 0;
}

 

0
0
分享到:
评论

相关推荐

    ZOJ月赛 题解 (ZOJ Monthly, August 2014)

    2. **搜索与图论**:深度优先搜索(DFS)、广度优先搜索(BFS)在图论问题中广泛使用,如最短路径、最小生成树、拓扑排序等。理解和熟练运用这些方法能帮助解决复杂的问题。 3. **动态规划(DP)**:动态规划是一种...

    zoj.zip_zoj

    3. **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索、Dijkstra 算法、Floyd-Warshall 算法等,这些是解决图论问题和路径查找的关键。 4. **动态规划**:背包问题、最长公共子序列、最短路径、...

    zoj代码集合

    5. **图论算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim、Kruskal)和最短路径算法(Bellman-Ford、Dijkstra、SPFA)等。这些都是解决图相关问题的核心技术。 6. **字符串处理**:...

    ZOJ经典源代码(ACM)

    5. **搜索与优化**:深度优先搜索(DFS)和广度优先搜索(BFS)是解决图论问题的常用方法,而A*搜索算法或Dijkstra算法则用于寻找最短路径。在实际编程中,为了提高效率,常常需要进行剪枝和启发式搜索。 6. **记忆...

    ZOJ解题报告ZOJ解题报告

    ### ZOJ解题报告:深入理解与策略分析 #### 一、FireNet1002:网络流量分析与优化 在FireNet1002问题中,主要考察的是网络流量管理和优化技术。该问题通常涉及到如何在有限的带宽资源下,合理分配网络流量,以确保...

    acm.tar.gz_zoj_zoj题解_题目分类

    5. 深度优先搜索(DFS)和广度优先搜索(BFS):这两种图遍历方法是解决许多搜索问题的基础。 6. 字符串处理:涉及字符串匹配、模式查找、编码解码等问题,经常出现在编程竞赛中。 7. 数据结构:如栈、队列、链表...

    ZOJ3180.rar_visual c

    搜索算法如深度优先搜索(DFS)和广度优先搜索(BFS)用于遍历结构。 在Visual C++中实现这些算法时,需要注意内存管理,避免内存泄漏,以及充分考虑程序的时间复杂度和空间复杂度,以满足比赛对于运行时间和内存...

    ZOJ四百多道题的源码

    首先,这些源码揭示了不同类型的算法应用,如动态规划、贪心算法、分治法、回溯法、深度优先搜索(DFS)、广度优先搜索(BFS)等。每种算法都有其特定的应用场景和优化技巧,比如动态规划中的记忆化搜索可以减少重复...

    ACM zoj题目 源代码

    标题 "ACM zoj题目 源代码" 提供了我们即将探讨的知识点核心:ACM竞赛中的编程问题和解题策略,以及所使用的编程语言——C++。这些源代码是学习算法和准备面试机考的重要资源。描述进一步强调了这些代码覆盖了常见的...

    acm-zju.rar

    2. **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、二分查找等。 3. **动态规划**:背包问题、最长公共子序列、最短路径问题等。 4. **图论算法**:最小生成树(Prim、Kruskal)、最短路径(Dijkstra、...

    收索资料 特棒的收索资料

    在实际问题中,DFS常被应用于各种题目,例如ZOJ 1711 "Sum It Up",这是一个典型的应用子集树的问题,需要找到满足特定条件的子集。另一个例子是HDOJ 1016 "Prime Ring Problem",虽然题目没有明确指出,但根据问题...

    ACMICPC协会程序设计大赛解题报告PPT课件.pptx

    在解决此类问题时,可以使用图的数据结构,如数组或树形结构,以及图的遍历算法,如深度优先搜索(DFS)或广度优先搜索(BFS)来确定连通性。 课件还提到了解题者需要关注的要点,如解题格式、输入输出格式,以及...

    ACM.rar_ACM 绠楁硶_HDU1010_hdu 18

    在原报告中,作者可能没有选择动态规划或贪心策略,而是采用搜索算法,如深度优先搜索(DFS)或广度优先搜索(BFS),甚至可能结合回溯法来寻找解。这种创新性地运用基础算法,可以启示我们如何在实际问题中灵活应用...

    浙大acm题解

    2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),常用于解决图和树的遍历问题,以及最短路径问题。 3. **图论算法**:如最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树算法(Prim、...

    ACMICPC协会程序设计大赛解题报告学习教案.pptx

    可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来确定当前道路网络的连通状态,并计算出最小生成树,如Prim算法或Kruskal算法,以求得最少的新增道路数。 在解题过程中,需要注意输入和输出的格式,确保结果的...

    ACM经典常用算法经典常用算法经典常用算法经典常用算法

    文档中提到了一些学习资源,如《具体数学:计算机科学基础》、《算法导论》等书籍,以及ZOJ、ACM-ICPC等在线平台,这些都是学习和练习算法的好地方。 ### 7. 编程实践与竞赛经验 文档最后强调了编程实践的重要性,...

    ACM大量习题题库及建议培养计划

    - 定期参加在线竞赛(如ZOJ、SPOJ) - 分析解题报告,学习高级解题技巧 - 参加团队训练,提升合作能力 - 注重代码优化,提高效率 #### 高级知识与专业技能 ACM竞赛要求选手具备广泛的计算机科学知识,包括但不限于...

    ACM 竞赛常用算法与数据结构

    - **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、回溯法等。 - **动态规划**:状态转移方程、记忆化搜索等。 - **图论算法**:最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树(Prim、Kruskal...

    acm/icpc 课件 贪心 递归 图论 最大矩阵乘积

    在处理图论问题时,递归常常被用来遍历图的各个节点,例如深度优先搜索(DFS)和广度优先搜索(BFS)。在寻找最大矩阵乘积时,递归可以帮助我们分解问题,如通过递归地寻找具有最大乘积的子矩阵对。 【图论】 图论...

    acm 资料大全 程序 设计 竞赛 icpc

    - 经常参与ZOJ等在线评测系统的练习。 - 参加校内或线上的模拟赛。 - 注重团队协作能力的培养。 - 养成良好的编程习惯和调试能力。 #### 四、常见算法与数据结构详解 - **图论**: - 最短路径算法(Floyd、...

Global site tag (gtag.js) - Google Analytics