题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1193
结题报告:本次代码写的比较乱,但是感觉收获还是不小的
第一次完全靠自己手写邻接表,虽然调了两天,但是最终还是搞出来了
首先4*4方格中每个方格可能出现的数字
1 | 1,2 | 2,3 | 3 |
1,4 | 1,2,4,5 | 2,3,5,6 | 3 ,6 |
4,7 | 4,5,7,8 | 5,6,8,9 | 6,9 |
7 | 7,8 | 8,9 | 9 |
输入的数字就是位于最上面的数字,然后与下面的数字都有关系,这种关系用邻接表存储
最后用拓扑排序,如果不存在环的话,就证明系统没有崩溃
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<stack> #include<string> using namespace std; struct node { int to; struct node *next; }; node *List[10]; stack<int>S; int mp[5][5],vis[10]; int counts[10]; int output[10]; string a[4][4]={ "1","12","23","3", "14","1245","2356","36", "47","4578","5689","69", "7","78","89","9" }; void CreatNet( ) { int len = 0; int flag = 0; for( int i=0;i<4;i++) { for(int j=0;j<4;j++) { memset(vis,0,sizeof(vis)); len = a[i][j].length( ); for(int t= 0;t<len;t++) { flag = 0; node *pre = new node; node *temp = new node; int cnt = a[i][j][t]-'0'; if(mp[i][j] == cnt) continue; else { temp->to = cnt; temp->next = NULL; } if(List[mp[i][j]]==NULL) { List[mp[i][j]] = temp; counts[cnt]++; } else { pre = List[mp[i][j]]; while(pre->next != NULL) { if(pre->to == temp->to ) { flag = 1; break; } pre = pre->next ; } if(!flag) { temp -> next = List[mp[i][j]]; List[mp[i][j]] = temp; counts[cnt]++; } } } } } } void TopoSort() { int pos,cnt = 0; for(int i=1;i<=9;i++) { if( counts[i] == 0) S.push(i); } while(!S.empty()) { pos = S.top(); S.pop(); output[cnt++] = pos; node *temp = new node; temp = List[pos]; while(temp != NULL ) {// printf("%d. ",temp->to ); counts[temp->to]--; if(counts[temp->to] == 0) { S.push(temp->to); } temp = temp->next; } } } int main( ) { char str1[10],str2[10],str[10]; while(scanf("%s",str1) != EOF) { int i,j=0; memset(List,0,sizeof(List)); memset(counts,0,sizeof(counts)); memset(output,0,sizeof(output)); if(strcmp(str1,"ENDOFINPUT")==0) break; for(i=0;i<4;i++) { for(int j=0;j<4;j++) { scanf("%d",&mp[i][j]); } } scanf("%s",str2); CreatNet( ); // for(int i=1;i<=9;i++) // { // printf("%d, ",counts[i]); // } // printf("\n"); TopoSort( ); //printf("\n"); bool flag = false; for(int i=0;i<9;i++) { if(output[i] == 0) { flag = true; break; } //printf("%d, ",output[i]); } if(!flag) printf("THESE WINDOWS ARE CLEAN"); else printf("THESE WINDOWS ARE BROKEN"); printf("\n"); } return 0; }
相关推荐
POJ上的一道题,我感觉挺难的。分享给大家,这是利用拓扑排序实现,也算是拓扑排序的一道例题。有助于大家对拓排的理解
【标题】"ZOJ 1002" 是一个在线编程竞赛题目,源自ZOJ(Zhejiang Online Judge),这是一个面向ACM/ICPC(国际大学生程序设计竞赛)的在线评测系统。题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法...
【标题】"zoj 源码700题"是指一个包含700多道ZOJ(在线判题系统Zhejiang Online Judge)编程竞赛题目的源代码集合。这个资源对于学习算法、提高编程技能以及准备编程竞赛的学员来说极具价值。 【描述】"包含了zoj...
标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...
ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...
浙江大学ZOJ(Zhejiang University Online Judge)是一个在线编程练习平台,主要服务于计算机科学和技术的学习者,特别是对算法和编程有浓厚兴趣的学生。这个平台提供了大量的编程题目,涵盖了各种难度和主题,帮助...
Problem Arrangement zoj 3777
【标题】"ZOJ1027解题指南"是一个针对特定编程竞赛题目——ZOJ1027的解决方案集合。ZOJ,全称为“Zhejiang Online Judge”,是浙江大学主办的一个在线编程竞赛平台,提供了丰富的算法题目供参赛者练习和挑战。本解题...
ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,主要面向计算机科学与信息技术的学生和爱好者,提供了大量的算法题目供参赛者练习和提交代码。"ZOJ题目答案源码"是一个压缩包文件,其中包含了700多道...
【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...
zoj 题库 详细解答 解题代码 该资源主要涵盖了 zoj 题库中的各种编程题目,涵盖了基本算法、数据结构、数学运算等多个方面的知识点。下面是对该资源中出现的知识点的详细解释: 1. 第一次 ACM 总结(7th ACM) 该...
ZOJ,全称为Zhejiang Online Judge,是一个知名的在线编程竞赛平台,主要服务于浙江大学和国内其他高校的学生,提供丰富的算法题目供参赛者练习和比赛。这个压缩包文件名为"ZOJ 700多题源代码",意味着它包含了解决...
学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路
《ZOJ 4041问题的正确解法与程序分析》 ZOJ(Zhejiang Online Judge)是一个知名的在线编程竞赛平台,其中的题目编号为4041的题目吸引了众多程序员的关注。本篇文章将深入探讨ZOJ 4041的正确解法,并对提供的源代码...
标题“ZOJ1014.zip_zoj code_zoj1004”表明这是一个与ZOJ(ZeroJudge)在线判题系统相关的代码压缩包,其中可能包含了解决ZOJ问题1004的源代码。ZOJ是面向编程爱好者和学生的一个在线编程竞赛平台,它提供了各种算法...
zoj 1003 c语言的,要写这么多描述吗。。
ZOJ1805代码
这份资料旨在帮助参赛者提升算法能力,提高解决实际问题的技巧,无论是在无网络环境下还是有网络时,都是学习和训练的得力助手。以下是对其中主要内容的详细解析: 首先,"ZOJ"全称为Zhejiang University Online ...
本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够
【标题】"zoj.zip_zoj"所对应的资源是一个与ZOJ(Zhejiang Online Judge)相关的代码集合。ZOJ是浙江大学主办的一个在线编程竞赛平台,它提供了多种算法题目供用户练习和提交代码进行评测。这个压缩包很可能包含了在...