Guest User

Entscheidungsproblem

a guest
Jul 15th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.95 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. int n, s, c;
  6. int valueSet;
  7. vector<vector<int> > stateTable;
  8. vector<vector<int> > moveTable;
  9. vector<vector<int> > memo;
  10. vector<int> tape;
  11. vector<bool> sol;
  12.  
  13. bool rec(int pos, int state){
  14.     //cout<<"*rec* pos: "<<pos<<" state: "<<state<<"\n";
  15.     if(pos == 0)
  16.         return true;
  17.     //cout<<"first passed\n";
  18.    
  19.     int &ref = memo[pos][state];
  20.     //cout<<"ref: "<<ref<<endl;
  21.     if(ref == valueSet)
  22.         return false;
  23.     if(ref != -1 && sol[ref])
  24.         return true;
  25.     ref = valueSet;
  26.     //cout<<"second passed\n";
  27.    
  28.     //cout<<"trying: stateTable["<<tape[pos]<<"]["<<state<<"]";
  29.     int sT = stateTable[state][tape[pos]];
  30.     //cout<<"sT: "<<sT<<endl;
  31.    
  32.     //cout<<"trying: moveTable["<<tape[pos]<<"]["<<state<<"]";
  33.     int mT = moveTable[state][tape[pos]];
  34.     //cout<<"mT: "<<mT<<endl;
  35.    
  36.     return rec(pos+mT, sT);
  37. }
  38.  
  39. int main(){
  40.     ifstream in("input.txt");
  41.     in>>n>>s>>c;
  42.    
  43.     stateTable.resize(s);
  44.     moveTable.resize(s);
  45.     for(int i=0; i<s; i++){
  46.         vector<int> tempS(c);
  47.         vector<int> tempM(c);
  48.         for(int j=0; j<c; j++){
  49.             int t1, t2, t3, t4;
  50.             in>>t1>>t2>>t3>>t4;
  51.             tempS[j] = t3;
  52.             tempM[j] = t4;
  53.         }
  54.         stateTable[i] = tempS;
  55.         moveTable[i] = tempM;
  56.     }
  57.    
  58.     tape.resize(n);
  59.     for(int i=0; i<n; i++)
  60.         in>>tape[i];
  61.    
  62.     vector<int> t(s, -1);
  63.     memo.assign(n, t);
  64.     in.close();
  65.    
  66.     /*cout<<"s1: "<<s<<" s2: "<<stateTable.size()<<endl;
  67.     cout<<"c1: "<<c<<" c2: "<<stateTable[0].size()<<endl;
  68.    
  69.     cout<<"state:\n";
  70.     for(int i=0; i<s; i++){
  71.         for(int j=0; j<c; j++){
  72.             cout<<stateTable[i][j]<<" ";
  73.         }
  74.         cout<<endl;
  75.     }
  76.    
  77.     cout<<"move:\n";
  78.     for(int i=0; i<s; i++){
  79.         for(int j=0; j<c; j++){
  80.             cout<<moveTable[i][j]<<" ";
  81.         }
  82.         cout<<endl;
  83.     }*/
  84.    
  85.     sol.assign(n, false);
  86.     int cont = 0;
  87.     for(int i=0; i<n; i++){
  88.         valueSet = i;
  89.         if(rec(i, 0)){
  90.             sol[i] = true;
  91.             cont++;
  92.         }
  93.     }
  94.    
  95.     ofstream out("output.txt");
  96.     out<<cont<<endl;
  97.     for(int i=0; i<n; i++)
  98.         if(sol[i])
  99.             out<<i<<endl;
  100.     out.close();
  101.     return 0;
  102. }
Add Comment
Please, Sign In to add comment