`

ZOJ 2193 Window Pains AOV网络

阅读更多

题目链接: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;
} 

 

 

0
1
分享到:
评论

相关推荐

    window pains POJ2585

    POJ上的一道题,我感觉挺难的。分享给大家,这是利用拓扑排序实现,也算是拓扑排序的一道例题。有助于大家对拓排的理解

    zoj 1002_zoj1002_

    【标题】"ZOJ 1002" 是一个在线编程竞赛题目,源自ZOJ(Zhejiang Online Judge),这是一个面向ACM/ICPC(国际大学生程序设计竞赛)的在线评测系统。题目编号1002,通常表示该题是ZOJ平台上的一个问题,可能涉及算法...

    zoj 源码700题

    【标题】"zoj 源码700题"是指一个包含700多道ZOJ(在线判题系统Zhejiang Online Judge)编程竞赛题目的源代码集合。这个资源对于学习算法、提高编程技能以及准备编程竞赛的学员来说极具价值。 【描述】"包含了zoj...

    zoj.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar

    标题中的"ZOJ.gz_ ZOJ_ZOJ 1016_max flow_zoj 1045_zoj.rar" 提到了两个ZOJ(Zhejiang Online Judge)的题目,分别是1016和1045,这两个数字通常代表在线编程竞赛中的题目编号。这些题目通常涉及到算法和数据结构的...

    ZOJ:浙江大学程序在线评测系统.docx

    ZOJ,全称“浙江大学程序在线评测系统”(Zhejiang University Online Judge),是一个提供信息学(算法竞赛)题库及程序评测的网站。以下是关于ZOJ的详细介绍: 一、基本信息 名称:浙江大学程序在线评测系统(ZOJ)...

    浙江大学ZOJ题目分类

    浙江大学ZOJ(Zhejiang University Online Judge)是一个在线编程练习平台,主要服务于计算机科学和技术的学习者,特别是对算法和编程有浓厚兴趣的学生。这个平台提供了大量的编程题目,涵盖了各种难度和主题,帮助...

    Problem Arrangement zoj 3777

    Problem Arrangement zoj 3777

    zoj1027解题指南

    【标题】"ZOJ1027解题指南"是一个针对特定编程竞赛题目——ZOJ1027的解决方案集合。ZOJ,全称为“Zhejiang Online Judge”,是浙江大学主办的一个在线编程竞赛平台,提供了丰富的算法题目供参赛者练习和挑战。本解题...

    ZOJ题目答案源码

    ZOJ(Zhejiang Online Judge)是一个著名的在线编程竞赛平台,主要面向计算机科学与信息技术的学生和爱好者,提供了大量的算法题目供参赛者练习和提交代码。"ZOJ题目答案源码"是一个压缩包文件,其中包含了700多道...

    ZOJ.zip_Jugs A_ZOJ NTA_zoj acm_zoj acm 1216_zoj code

    【ZOJ.zip】是一个压缩包,里面包含了与ZOJ(Zhejiang Online Judge)相关的ACM(International Collegiate Programming Contest)题解。ZOJ是一个在线编程竞赛平台,它为参赛者提供了一系列算法题目进行练习,以...

    zoj 题库 详细解答 解题代码

    zoj 题库 详细解答 解题代码 该资源主要涵盖了 zoj 题库中的各种编程题目,涵盖了基本算法、数据结构、数学运算等多个方面的知识点。下面是对该资源中出现的知识点的详细解释: 1. 第一次 ACM 总结(7th ACM) 该...

    zoj 700源代码

    ZOJ,全称为Zhejiang Online Judge,是一个知名的在线编程竞赛平台,主要服务于浙江大学和国内其他高校的学生,提供丰富的算法题目供参赛者练习和比赛。这个压缩包文件名为"ZOJ 700多题源代码",意味着它包含了解决...

    ACM训练必备POJ ZOJ题目分类及解题思路

    学习ACM程序设计的朋友一定要看,这是训练必备的POJ ZOJ题目分类及解题思路

    zoj.rar_zoj_zoj4041

    《ZOJ 4041问题的正确解法与程序分析》 ZOJ(Zhejiang Online Judge)是一个知名的在线编程竞赛平台,其中的题目编号为4041的题目吸引了众多程序员的关注。本篇文章将深入探讨ZOJ 4041的正确解法,并对提供的源代码...

    ZOJ1014.zip_zoj code_zoj1004

    标题“ZOJ1014.zip_zoj code_zoj1004”表明这是一个与ZOJ(ZeroJudge)在线判题系统相关的代码压缩包,其中可能包含了解决ZOJ问题1004的源代码。ZOJ是面向编程爱好者和学生的一个在线编程竞赛平台,它提供了各种算法...

    zoj 1003c 语言的

    zoj 1003 c语言的,要写这么多描述吗。。

    ZOJ1805代码

    ZOJ1805代码

    zoj 分类加题解(浙大ACM)

    这份资料旨在帮助参赛者提升算法能力,提高解决实际问题的技巧,无论是在无网络环境下还是有网络时,都是学习和训练的得力助手。以下是对其中主要内容的详细解析: 首先,"ZOJ"全称为Zhejiang University Online ...

    zoj1951的AC代码

    本代码是zoj上AC的1951的代码,把双重循环简化为O(n),不过素数判断的改进还不够

    zoj.zip_zoj

    【标题】"zoj.zip_zoj"所对应的资源是一个与ZOJ(Zhejiang Online Judge)相关的代码集合。ZOJ是浙江大学主办的一个在线编程竞赛平台,它提供了多种算法题目供用户练习和提交代码进行评测。这个压缩包很可能包含了在...

Global site tag (gtag.js) - Google Analytics