Archives
Trending
Support
Login
clear text
XML
Django
JavaScript
MATLAB
C
C++
C#
Python
SQL
Shell
Bash
Markdown
YAML
JSON
HTML
CSS
PHP
Java
Ruby
Go
Rust
Swift
Kotlin
Arduino
TypeScript
Perl
Autohotkey
Lua
SQF
R
Scala
Haskell
Groovy
Dart
Clojure
VB.NET
Objective-C
PowerShell
Bash
CoffeeScript
Verilog
#include
#include
#include
#include
using namespace std; #define right 1 #define down 2 #define left 3 #define up 4 int row, col; struct Point{ int x, y, direction; Point(int x, int y){ this->x = x; this->y = y; direction = 1; } }; void printSolution(vector
map, stack
path){ while(!path.empty()){ Point point = path.top(); path.pop(); if(map[point.x][point.y] != 'S' && map[point.x][point.y] != 'E') map[point.x][point.y] = '1'; } for(int i = 0; i < row; i++){ for(int j = 0; j < col; j++){ cout << map[i][j] << " "; } } } void transverse(vector
map, int n, int m, vector
> visited, stack
nodes){ Point point(n, m); nodes.push(point); while(!nodes.empty()){ Point temp = nodes.top(); int dir = temp.direction; int x = temp.x, y = temp.y; temp.direction++; nodes.pop(); nodes.push(temp); //cout << "X = " << x << " Y = " << y << endl; //cout << "Direction : " << dir << endl; if(map[x][y] == 'E') return printSolution(map, nodes); if(dir == right){ if(map[x][y + 1] != '2' && !visited[x][y + 1]){ Point p(x, y + 1); visited[x][y + 1] = true; nodes.push(p); //cout << "Right" << endl; } } else if(dir == down){ if(map[x + 1][y] != '2' && !visited[x + 1][y]){ Point p(x + 1, y); visited[x + 1][y] = true; nodes.push(p); //cout << "Bottom" << endl; } } else if(dir == left){ if(map[x][y - 1] != '2' && !visited[x][y - 1]){ Point p(x, y - 1); visited[x][y - 1] = true; nodes.push(p); //cout << "Left" << endl; } } else if(dir == up){ if(map[x - 1][y] != '2' && !visited[x - 1][y]){ Point p(x - 1, y); visited[x - 1][y] = true; nodes.push(p); //cout << "Up" << endl; } } else{ visited[x][y] = false; nodes.pop(); } } cout << "No solution found! End point not reachable!" << endl; } void solve(vector
map){ int x = -1, y = -1; for(int i = 0; i < row && x == -1; i++){ for(int j = 0; j < col; j++){ if(map[i][j] == 'S'){ x = i; y = j; break; } } } //cout << x << " " << y << endl; vector
> visited(row, vector
(col, false)); stack
nodes; transverse(map, x, y, visited, nodes); } int main(){ cin >> col >> row; char ch; vector
map; for(int i = 0; i < row; i++){ string str = ""; for(int j = 0; j < col; j++){ cin >> ch; str += ch; } map.push_back(str); } solve(map); return 0; }
Mark as private (unlisted)
for 30 minutes
for 6 hours
for 1 day
for 1 week
for 1 month
for 1 year
everlasting (like CCCP)