大致思路:
每一行的点和每一列的点都连上边,然后用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; }
相关推荐
2. **搜索与图论**:深度优先搜索(DFS)、广度优先搜索(BFS)在图论问题中广泛使用,如最短路径、最小生成树、拓扑排序等。理解和熟练运用这些方法能帮助解决复杂的问题。 3. **动态规划(DP)**:动态规划是一种...
3. **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、A* 搜索、Dijkstra 算法、Floyd-Warshall 算法等,这些是解决图论问题和路径查找的关键。 4. **动态规划**:背包问题、最长公共子序列、最短路径、...
5. **图论算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),以及最小生成树(Prim、Kruskal)和最短路径算法(Bellman-Ford、Dijkstra、SPFA)等。这些都是解决图相关问题的核心技术。 6. **字符串处理**:...
5. **搜索与优化**:深度优先搜索(DFS)和广度优先搜索(BFS)是解决图论问题的常用方法,而A*搜索算法或Dijkstra算法则用于寻找最短路径。在实际编程中,为了提高效率,常常需要进行剪枝和启发式搜索。 6. **记忆...
### ZOJ解题报告:深入理解与策略分析 #### 一、FireNet1002:网络流量分析与优化 在FireNet1002问题中,主要考察的是网络流量管理和优化技术。该问题通常涉及到如何在有限的带宽资源下,合理分配网络流量,以确保...
5. 深度优先搜索(DFS)和广度优先搜索(BFS):这两种图遍历方法是解决许多搜索问题的基础。 6. 字符串处理:涉及字符串匹配、模式查找、编码解码等问题,经常出现在编程竞赛中。 7. 数据结构:如栈、队列、链表...
搜索算法如深度优先搜索(DFS)和广度优先搜索(BFS)用于遍历结构。 在Visual C++中实现这些算法时,需要注意内存管理,避免内存泄漏,以及充分考虑程序的时间复杂度和空间复杂度,以满足比赛对于运行时间和内存...
首先,这些源码揭示了不同类型的算法应用,如动态规划、贪心算法、分治法、回溯法、深度优先搜索(DFS)、广度优先搜索(BFS)等。每种算法都有其特定的应用场景和优化技巧,比如动态规划中的记忆化搜索可以减少重复...
标题 "ACM zoj题目 源代码" 提供了我们即将探讨的知识点核心:ACM竞赛中的编程问题和解题策略,以及所使用的编程语言——C++。这些源代码是学习算法和准备面试机考的重要资源。描述进一步强调了这些代码覆盖了常见的...
2. **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、二分查找等。 3. **动态规划**:背包问题、最长公共子序列、最短路径问题等。 4. **图论算法**:最小生成树(Prim、Kruskal)、最短路径(Dijkstra、...
在实际问题中,DFS常被应用于各种题目,例如ZOJ 1711 "Sum It Up",这是一个典型的应用子集树的问题,需要找到满足特定条件的子集。另一个例子是HDOJ 1016 "Prime Ring Problem",虽然题目没有明确指出,但根据问题...
在解决此类问题时,可以使用图的数据结构,如数组或树形结构,以及图的遍历算法,如深度优先搜索(DFS)或广度优先搜索(BFS)来确定连通性。 课件还提到了解题者需要关注的要点,如解题格式、输入输出格式,以及...
在原报告中,作者可能没有选择动态规划或贪心策略,而是采用搜索算法,如深度优先搜索(DFS)或广度优先搜索(BFS),甚至可能结合回溯法来寻找解。这种创新性地运用基础算法,可以启示我们如何在实际问题中灵活应用...
2. **搜索算法**:包括深度优先搜索(DFS)和广度优先搜索(BFS),常用于解决图和树的遍历问题,以及最短路径问题。 3. **图论算法**:如最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树算法(Prim、...
可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来确定当前道路网络的连通状态,并计算出最小生成树,如Prim算法或Kruskal算法,以求得最少的新增道路数。 在解题过程中,需要注意输入和输出的格式,确保结果的...
文档中提到了一些学习资源,如《具体数学:计算机科学基础》、《算法导论》等书籍,以及ZOJ、ACM-ICPC等在线平台,这些都是学习和练习算法的好地方。 ### 7. 编程实践与竞赛经验 文档最后强调了编程实践的重要性,...
- 定期参加在线竞赛(如ZOJ、SPOJ) - 分析解题报告,学习高级解题技巧 - 参加团队训练,提升合作能力 - 注重代码优化,提高效率 #### 高级知识与专业技能 ACM竞赛要求选手具备广泛的计算机科学知识,包括但不限于...
- **搜索算法**:深度优先搜索(DFS)、广度优先搜索(BFS)、回溯法等。 - **动态规划**:状态转移方程、记忆化搜索等。 - **图论算法**:最短路径算法(Dijkstra、Floyd-Warshall)、最小生成树(Prim、Kruskal...
在处理图论问题时,递归常常被用来遍历图的各个节点,例如深度优先搜索(DFS)和广度优先搜索(BFS)。在寻找最大矩阵乘积时,递归可以帮助我们分解问题,如通过递归地寻找具有最大乘积的子矩阵对。 【图论】 图论...
- 经常参与ZOJ等在线评测系统的练习。 - 参加校内或线上的模拟赛。 - 注重团队协作能力的培养。 - 养成良好的编程习惯和调试能力。 #### 四、常见算法与数据结构详解 - **图论**: - 最短路径算法(Floyd、...