problemscpp
A collection of my answers to algorithm problems in c++.
函数
acwing::acwing4318 命名空间参考

  1. 最短路径
更多...

函数

int main (istream &cin, ostream &cout)
 
 TEST (acwing4318, case1)
 
 TEST (acwing4318, case2)
 

详细描述

  1. 最短路径

函数说明

◆ main()

int acwing::acwing4318::main ( istream &  cin,
ostream &  cout 
)

在文件 acwing.cpp5828 行定义.

5828 {
5829 int x = 0;
5830 int y = 0;
5831 char op;
5832 int step = 0;
5833 set<pair<int, int>> s;
5834 s.insert(make_pair(0, 0));
5835 while(cin >> op) {
5836 step++;
5837 switch(op) {
5838 case 'U':
5839 x--;
5840 if(s.contains(make_pair(x, y)) ||
5841 s.contains(make_pair(x - 1, y)) ||
5842 s.contains(make_pair(x, y + 1)) ||
5843 s.contains(make_pair(x, y - 1))) {
5844 cout << "NO";
5845 return 0;
5846 }
5847 break;
5848 case 'D':
5849 x++;
5850 if(s.contains(make_pair(x, y)) ||
5851 s.contains(make_pair(x + 1, y)) ||
5852 s.contains(make_pair(x, y + 1)) ||
5853 s.contains(make_pair(x, y - 1))) {
5854 cout << "NO";
5855 return 0;
5856 }
5857 break;
5858 case 'L':
5859 y--;
5860 if(s.contains(make_pair(x, y)) ||
5861 s.contains(make_pair(x, y - 1)) ||
5862 s.contains(make_pair(x + 1, y)) ||
5863 s.contains(make_pair(x - 1, y))) {
5864 cout << "NO";
5865 return 0;
5866 }
5867 break;
5868 case 'R':
5869 y++;
5870 if(s.contains(make_pair(x, y)) ||
5871 s.contains(make_pair(x, y + 1)) ||
5872 s.contains(make_pair(x + 1, y)) ||
5873 s.contains(make_pair(x - 1, y))) {
5874 cout << "NO";
5875 return 0;
5876 }
5877 break;
5878 default:
5879 step--;
5880 break;
5881 }
5882 s.insert(make_pair(x, y));
5883 }
5884 if(step == 1) {
5885 cout << "YES";
5886 return 0;
5887 }
5888 if(abs(x) <= 1 && y == 0 || x == 0 && abs(y) <= 1) {
5889 cout << "NO";
5890 } else {
5891 cout << "YES";
5892 }
5893 return 0;
5894 }

被这些函数引用 TEST().

◆ TEST() [1/2]

acwing::acwing4318::TEST ( acwing4318  ,
case1   
)

在文件 acwing_test.cpp2772 行定义.

2772 {
2773 istringstream in("LLUUUR");
2774 auto out = ostringstream();
2775 main(in, out);
2776 const auto ans = out.str();
2777 ASSERT_EQ("YES", ans);
2778 }
int main(int argc, char **argv)
Definition: main.cpp:5

引用了 main().

◆ TEST() [2/2]

acwing::acwing4318::TEST ( acwing4318  ,
case2   
)

在文件 acwing_test.cpp2780 行定义.

2780 {
2781 istringstream in("RRUULLDD");
2782 auto out = ostringstream();
2783 main(in, out);
2784 const auto ans = out.str();
2785 ASSERT_EQ("NO", ans);
2786 }

引用了 main().