Feladatok‎ > ‎

Labirintus

Feladat

Olvass be egy képet, és találd meg a legrövidebb utat két standard inputon megadott koordinátájú pixel között, úgy, hogy
  • csak azonos színű pixelekre léphetsz
  • amik élben szomszédosak egymással.
Írd ki a legrövidebb ilyen út hosszát, majd rajzold be valamilyen színnel a képre!

Példa bemenet

labyrinth.png
0 5
55 58

Hasznos lehet

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

public class ImageEditor {

	public static void main(String[] args) {
		int[][] pixels = read("kep.png");
		int h = pixels.length,
				w = pixels[0].length;
		pixels[h/2][w/2] = 0xFF0000; // #FF0000 = rgb(255,0,0)
		write("kep2.png", pixels);
	}

	private static int[][] read(String path) {
		try {
			BufferedImage img = ImageIO.read(new File(path));
			int w = img.getWidth(),
					h = img.getHeight();
			int[][] out = new int[h][w];
			for(int i=0;i<w;++i)
				for(int j=0;j<h;++j)
					out[j][i] = img.getRGB(i,j);
			return out;
		} catch (IOException e) {
			e.printStackTrace();
			return null;
		}
	}

	private static void write(String path, int[][] pixels) {
		int h = pixels.length,
				w = pixels[0].length;
		BufferedImage img = new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
		for(int i=0;i<w;++i)
			for(int j=0;j<h;++j)
				img.setRGB(i,j,pixels[j][i]);
		try {
			ImageIO.write(img,"png",new File(path));
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

}

A read(String) egy kétdimenziós int tömbbel tér vissza, ahol az [i][j]-edik az i-edik sor j-edik oszlopában szereplő pixel színe. A színt egy tizenhatos számrendszerbeli számként könnyű elképzelni, ahol RRGGBB formátumban tudunk egy színt megadni. Javában a 0x… előtaggal lehet tizenhatos számrendszerbeli számot megadni. (Tehát a 0x3A = 3×161+10×160=48+10=58.) A 0x00FF00 a "legzöldebb" szín.

Hasonló

ą
Bence Hornák,
2016. máj. 13. 0:09
Comments