Advertisement
Guest User

timi_rekurzio

a guest
Apr 29th, 2017
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. #include "graphics.hpp"
  2. #include <iostream>
  3. #include <vector>
  4. #include <fstream>
  5. #include <cstdlib>
  6. #include <cmath>
  7.  
  8. using namespace genv;
  9. using namespace std;
  10.  
  11. void beolvas(vector<vector<int>> &v)
  12. {
  13. ifstream fin("terkep.txt");
  14. if(!fin.good())
  15. {
  16. cerr << "Could not open input file. Check if it is in the right folder!" << endl;
  17. exit(1);
  18. }
  19. unsigned X, Y;
  20. fin >> X >> Y;
  21. v.resize(X);
  22. for(size_t i = 0; i < X; ++i)
  23. {
  24. v[i].resize(Y);
  25. for(size_t j = 0; j < Y; ++j)
  26. {
  27. fin >> v[i][j];
  28. }
  29. }
  30. }
  31.  
  32. void kirajzol(const vector<vector<int> > &v, canvas &c)
  33. {
  34. for(size_t i = 0; i < v.size(); ++i)
  35. {
  36. for(size_t j = 0; j < v[i].size(); ++j)
  37. {
  38. int b;
  39. int g = 127+v[i][j];
  40. if(v[i][j] < 0)
  41. {
  42. b = 255;
  43. }
  44. else
  45. {
  46. b = 0;
  47. }
  48. c << move_to(i,j) << color(0,g,b) << dot;
  49. }
  50. }
  51. c << refresh;
  52. }
  53.  
  54. void sziget(size_t current_x, size_t current_y, int high, vector<vector<int> > &terkep, vector<vector<bool> > &checked)
  55. {
  56. if(current_x < 0 || current_x > terkep.size()-1 || current_y < 0 || current_y > terkep[current_x].size()-1 || checked[current_x][current_y])
  57. {
  58. return;
  59. }
  60. if(terkep[current_x][current_y] < high)
  61. {
  62. gout << move_to(current_x, current_y) << color(255, 0, 0) << dot << refresh;
  63. return;
  64. }
  65. checked[current_x][current_y] = true;
  66. sziget(current_x-1, current_y, high, terkep, checked);
  67. sziget(current_x+1, current_y, high, terkep, checked);
  68. sziget(current_x, current_y-1, high, terkep, checked);
  69. sziget(current_x, current_y+1, high, terkep, checked);
  70. }
  71.  
  72. void tr(canvas &out, canvas &background)
  73. {
  74. out << stamp(background, 0, 0) << refresh;
  75. }
  76.  
  77. int main()
  78. {
  79. vector<vector<int> > terkep;
  80. vector<vector<bool>> checked;
  81. beolvas(terkep);
  82. unsigned X = terkep.size();
  83. unsigned Y = terkep[0].size();
  84. gout.open(X,Y);
  85. canvas hatter(X,Y);
  86. kirajzol(terkep,hatter);
  87. gout << refresh;
  88. tr(gout, hatter);
  89. event ev;
  90. while(gin >> ev && ev.keycode!=key_escape)
  91. {
  92. if(ev.type == ev_mouse && ev.button == btn_left)
  93. {
  94. vector<vector<bool> > checked(terkep.size(), vector<bool>(terkep[0].size(), false));
  95. if(terkep[ev.pos_x][ev.pos_y] >= 0)
  96. {
  97. sziget(ev.pos_x, ev.pos_y, 0, terkep, checked);
  98. }
  99. gout << refresh;
  100. }
  101. }
  102. return 0;
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement