Java-POJ1009-Edge Detection(未完成,有C++代码)

RLE编码,还不会,先搬运一下大佬的代码,理解之后再用Java自己实现

 1 #include <map>
 2 #include <vector>
 3 #include <cstdlib>
 4 #include <iostream>
 5 using namespace std;
 6 static int around[8][2]= {{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};
 7 map<int,int>::iterator a_It,b_It;
 8 map<int,int> a,b;
 9 vector<int> s;
10 int getValue(int index) {
11     int value=0;
12     for(a_It = a.begin(); a_It != a.end(); a_It++) {
13         if(index<a_It->first) break;
14         value=a_It->second;
15     }
16     return value;
17 }
18 int getMax(int index,int width,int count) {
19     int center=getValue(index);
20     int h=index/width;
21     int max=0;
22     for(int i=0; i<8; i++) {
23         int sub=index+around[i][0]*width+around[i][1];
24         if(h+around[i][0]==sub/width && sub>=0 && sub<count) {
25             int a=getValue(sub);
26             max=abs(center-a)>max?abs(center-a):max;
27         }
28     }
29     return max;
30 }
31 void process(int width,int count) {
32     for(int i=0; i < s.size(); i++) {
33         int index=s.at(i);
34         b.insert(pair<int,int>(index,getMax(index,width,count)));
35     }
36 }
37 int main() {
38     int width;
39     while(cin>>width && cout<<width<<endl && width) {
40         a.clear(),b.clear(),s.clear();
41         int v,l,count=0;
42         while(cin>>v>>l && l) { //v有可能为0
43             a.insert(pair<int,int>(count,v));
44             count+=l;
45         }
46         for(a_It = a.begin(); a_It != a.end(); a_It++) {
47             for(int i=-1; i<2; i++) {
48                 for(int j=-1; j<2; j++) {
49                     int index=a_It->first+i*width+j;
50                     if(index>=0 && index <count)
51                         s.push_back(index);
52                 }
53             }
54         }
55         s.push_back(width);
56         s.push_back(count-width);
57         process(width,count);
58
59         b_It = b.begin();
60         int s=b_It->first;
61         int val=b_It->second;
62         b_It++;
63         for(; b_It != b.end(); b_It++) {
64             if(b_It->second != val) {
65                 cout<<val<<" "<<b_It->first-s<<endl;
66                 s=b_It->first;
67                 val=b_It->second;
68             }
69         }
70         cout<<val<<" "<<count-s<<endl;
71         cout<<"0 0"<<endl;
72     }
73     return 0;
74 }

原文地址:https://www.cnblogs.com/JasonCow/p/12238006.html

时间: 2024-10-10 01:40:13

Java-POJ1009-Edge Detection(未完成,有C++代码)的相关文章

poj1009 Edge Detection

给一个n * m的矩阵(n * m ≤ 1e9, m ≤ 1e9)A, 求矩阵A'. 定义A'(i, j) = max(abs(A(i, j) - A(u, v))), 其中(u, v)在矩阵内同时在以(i, j)为中心的九宫格范围内. 考虑到矩阵大小,当然不是按照传统方式呈现矩阵,而是用一种流程编码(RLE)的编码方式表示. 编码方式题目已经交代的很清楚了. 看似很棘手的一个题目,对于如此大的数据量感觉似乎无从下手. 注意到题目说明pair数不会超过1e3. 也就是说,相连的重复数字是很多的,

POJ 1009 Edge Detection

Edge Detection Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 22153   Accepted: 5201 Description IONU Satellite Imaging, Inc. records and stores very large images using run length encoding. You are to write a program that reads a compre

java(课程设计之记事本界面部分代码公布)

代码:涉及记事本的一些界面......!! 1 /* 2 *java课程设计之记事本(coder @Gxjun) 3 * 编写一个记事本程序 4 * 要求: 5 * 用图形用户界面实现. 6 * 能实现编辑.保存.另存为.查找替换等功能. 7 * 提示:使用文件输入输出流. 8 */ 9 package project; 10 11 import javax.swing.*; 12 import java.awt.*; 13 import java.awt.event.*; //引用类设置触发事

java泛型边界深入探讨,示例代码

package org.rui.generics.bounds; import java.awt.Color; /** * 边界 * 下面展示了边界基本要素. * @author lenovo * */ interface HasColor{java.awt.Color getColor();} class Colored<T extends HasColor> { T item; Colored(T item){this.item=item;} T getItem(){return item

java mail实现Email的发送,完整代码

java mail实现Email的发送,完整代码 1.对应用程序配置邮件会话 首先, 导入jar <dependencies> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.5.2</version> </dependency> </dependencies

java swing高仿酷我音乐界面代码例子下载

原文:java swing高仿酷我音乐界面代码例子下载 代码下载地址:http://www.zuidaima.com/share/1550463245044736.htm 高仿酷我音乐界面尽情欣赏 java swing高仿酷我音乐界面代码例子下载,布布扣,bubuko.com

Java中this和static关键字及代码块

this: 可以使用this表示类中的属性------this.name=name 可以使用this强调调用的是本类的方法 可以使用this调用本类的构造方法------this();调用本类中无参构造方法 可以使用this表示当前对象(调用方法的对象)----最重要的用途 static: 声明属性---------属性则为全局变量 声明方法---------Person.setName("Tom");使用类名称调用static方法 普通代码块:直接在方法或是语句中定义的代码块 pub

想找一个java版本的twitter的IdWorker的代码

原文:想找一个java版本的twitter的IdWorker的代码 代码下载地址:http://www.zuidaima.com/share/1550463224040448.htm 代码运行结果: uuid的强化版本,保证在同一时空产生的id号是唯一的.uuid请参考百度百科:http://baike.baidu.com/link?url=WrZ_Pr2K5tBgd3olLFH7BScVtAfBDMFoaemIZgDlKUJChjo_Bsi0p7_6Dwkz9wSleOO0fevWbT2izA

Java实现MD5加密及解密的代码实例分享

链接:http://www.jb51.net/article/86027.htm Java实现MD5加密及解密的代码实例分享 作者:厦门大学陈黎栋 字体:[增加 减小] 类型:转载 时间:2016-06-07我要评论 如果对安全性的需求不是太高,MD5仍是使用非常方便和普及的加密方式,比如Java中自带的MessageDigest类就提供了支持,这里就为大家带来Java实现MD5加密及解密的代码实例分享: 基础:MessageDigest类的使用 其实要在Java中完成MD5加密,Message