Advertisement
Guest User

dem strings

a guest
May 1st, 2014
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.85 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <fstream>
  3. #include <iostream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. const int ROWS = 600;
  9. const int COLS = 800;
  10.  
  11. int readmap(int map[][COLS],
  12.             int & irow, int & icol,
  13.             string filename);
  14. enum
  15. {
  16.     READMAP_SUCCESS, READMAP_FORMAT, READMAP_ACCESS, READMAP_SIZE
  17. };
  18.  
  19. int fill(int map[][COLS],
  20.          int irow, int icol,
  21.          int startx, int starty,
  22.          int goalx, int goaly);
  23.  
  24. void descent(int map[][COLS],
  25.              int irow, int icol,
  26.              int startx, int starty,
  27.              char filename[]);
  28.  
  29. void printmap(int map[][COLS],
  30.               int irow, int icol,
  31.               char filename[]);
  32.  
  33. int main(int argc, char* argv[])
  34. {
  35.     string infilename, outfilename;
  36.     int ret, icol, irow, startx, starty, goalx, goaly; 
  37.     int map[ROWS][COLS] = { 0 };
  38.  
  39.     //file opening/closing won't happen here
  40.     do
  41.     {
  42.         cout << "Enter input filename: ";
  43.         getline(cin, infilename);
  44.     }
  45.     while (infilename.empty());
  46.  
  47.     cout << "Enter output filename [optional]: ";
  48.     getline(cin, outfilename);
  49.     if (outfilename.empty())
  50.     {
  51.         size_t pos;
  52.  
  53.         outfilename = infilename;
  54.         pos = outfilename.length() - 4;
  55.         outfilename.insert(pos, "_path");
  56.     }
  57.  
  58.     // Write some debug info to stderr.
  59.     cerr << "Using files "
  60.          << infilename << " (input) and "
  61.          << outfilename << " (output)"
  62.          << endl;
  63.  
  64.     irow = 404;
  65.     icol = 404;
  66.  
  67.     ret = readmap(map, irow, icol, infilename);
  68.     if (ret != READMAP_SUCCESS) return -1; // Could do something with the retval
  69.  
  70.     // TODO: Handle exceptions...?
  71.     cout << "Please enter the start coordinates, x y: ";
  72.     cin >> startx >> starty;
  73.  
  74.     cout << "Please enter the goal coordinates, x y: ";
  75.     cin >> goalx >> goaly;
  76.  
  77.     fill(map, irow, icol, startx, starty, goalx, goaly);
  78.  
  79.     return 0;
  80. }
  81.  
  82. int readmap(int map[][COLS], int &irow, int &icol, string filename)
  83. {
  84.     int pixel[ROWS][COLS][3] = { 0 };
  85.  
  86.     ifstream fin;
  87.     size_t pos;
  88.  
  89.     pos = filename.length() - 4;
  90.     if (filename.substr(pos, 4) != ".ppm")
  91.     {
  92.         cerr << "File not PPM format!" << endl;
  93.         return READMAP_FORMAT;
  94.     }
  95.  
  96.     fin.open(filename);
  97.     if (!fin)
  98.     {
  99.         cerr << "File not found: " << filename << endl;
  100.         return READMAP_ACCESS;
  101.     }
  102.  
  103.     char color;
  104.     int colornum;
  105.     fin >> color;
  106.     fin >> icol;
  107.     fin >> irow;
  108.     fin >> colornum;
  109.     if (icol > COLS || irow > ROWS)
  110.     {
  111.         cerr << "File too large: found " << icol << "x" << irow
  112.              << ", 800x600 is the max."
  113.              << endl;
  114.         return READMAP_SIZE;
  115.     }
  116.     cout << "Image size: cols = " << icol << ",   rows= " << irow << endl;
  117.  
  118.     int p, r;
  119.  
  120.     for (p = 0; p < irow; p++)
  121.     {
  122.         for (r = 0; r < icol; r++)
  123.         {
  124.             fin >> pixel[p][r][0];
  125.             fin >> pixel[p][r][1];
  126.             fin >> pixel[p][r][2];
  127.  
  128.             if (pixel[p][r][0] > 127 || pixel[p][r][1] > 127 || pixel[p][r][2] > 127)
  129.             {
  130.                 map[p][r] = -1;
  131.             }
  132.         }
  133.     }
  134.  
  135.     return READMAP_SUCCESS;
  136. }
  137.  
  138. int fill(int map[][COLS], int irow, int icol, int startx, int starty,
  139.     int goalx, int goaly)
  140. {
  141.     bool check = true;
  142.     int count = 0;
  143.     int i, j, g, h;
  144.     map[goalx][goaly] = 1;
  145.     while (map[startx][starty] == 0)
  146.     {
  147.         check = false;
  148.         count++;
  149.         while (check == false)
  150.         {
  151.                 for (i = 0; i < irow; i++)
  152.             {
  153.                 for (j = 0; j < icol; j++)
  154.                 {
  155.                     if (map[i][j] == count)
  156.                     {
  157.                         for (g = -1; g <= 1; g++)
  158.                         {
  159.                             for (h = -1; h <= 1; h++)
  160.                             {
  161.                                 if (map[i + g][j + h] != -1 && (g != 0 || h != 0))
  162.                                 {
  163.                                     if (map[i + g][j + h] == 0)
  164.                                     {
  165.                                         map[i + g][j + h] = count + 1;
  166.                                     }
  167.                                 }
  168.                             }
  169.                         }
  170.                     }
  171.                     else
  172.                         check = true;
  173.                 }
  174.             }
  175.  
  176.         }
  177.     }
  178.     return 1;
  179. }
  180.  
  181. void descent(int map[][COLS], int irow, int icol, int startx, int starty,
  182.     char filename[])
  183. {
  184.      
  185. }
  186.  
  187. void printmap(int map[][COLS], int irow, int icol, char filename[])
  188. {
  189.  
  190. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement